windows 串口驱动开发
没钱吃饭 2010-06-01 05:21:47 大家好,
小米在做一个PCI的八串口驱动,我遇到一个奇怪的问题,我在驱动程序中加了一个selfdefine.h 头文件,然后,#include"selfdefine.h" 到pnp.c 中,编译,无 error,无warning ,但是,我安装驱动时,全部出现惊叹号,说是没有可用的数据了,吾实在不知道是怎么回事,求大家,给个解决方法,
selfdefine.h的内容如下:
#ifndef _SELFDEFINE_H_
#define _SELFDEFINE_H_
#include <windef.h>
#if !defined (_CFGMGR32_)
#define CMAPI DECLSPEC_IMPORT
#else
#define CMAPI
#endif
typedef DWORD RETURN_TYPE;
typedef RETURN_TYPE CONFIGRET;
//
// Device Instance Handle data type
//
typedef DEVNODE, DEVINST;
typedef DEVNODE *PDEVNODE, *PDEVINST;
//
// Device Instance Identifier data type
// The device instance ID specifies the registry path, relative to the
// Enum key , for a device instance. For example: \Root\*PNP0500\0000.
//
typedef CHAR *DEVNODEID_A, *DEVINSTID_A; // Device ID ANSI name.
typedef WCHAR *DEVNODEID_W, *DEVINSTID_W; // Device ID Unicode name.
#ifdef UNICODE
typedef DEVNODEID_W DEVNODEID;
typedef DEVINSTID_W DEVINSTID;
#else
typedef DEVNODEID_A DEVNODEID;
typedef DEVINSTID_A DEVINSTID;
#endif
//
// Logical Configuration Handle data type
//
typedef HANDLE HMACHINE;
typedef HMACHINE *PHMACHINE;
//
//
#define CM_LOCATE_DEVNODE_NORMAL 0x00000000
//
#define CR_SUCCESS (0x00000000)
CMAPI
CONFIGRET
WINAPI
CM_Locate_DevNodeA(
OUT PDEVINST pdnDevInst,
IN DEVINSTID_A pDeviceID, OPTIONAL
IN ULONG ulFlags
);
CMAPI
CONFIGRET
WINAPI
CM_Locate_DevNodeW(
OUT PDEVINST pdnDevInst,
IN DEVINSTID_W pDeviceID, OPTIONAL
IN ULONG ulFlags
);
#ifdef UNICODE
#define CM_Locate_DevNode CM_Locate_DevNodeW
#else
#define CM_Locate_DevNode CM_Locate_DevNodeA
#endif // UNICODE
CMAPI
CONFIGRET
WINAPI
CM_Reenumerate_DevNode(
IN DEVINST dnDevInst,
IN ULONG ulFlags
);
CMAPI
CONFIGRET
WINAPI
CM_Reenumerate_DevNode_Ex(
IN DEVINST dnDevInst,
IN ULONG ulFlags,
IN HMACHINE hMachine
);
#endif
VOID ShowForHardWare()
{
DEVINST devInst;
CONFIGRET status;
//得到设备管理树的根结点
status = CM_Locate_DevNode(&devInst,NULL,CM_LOCATE_DEVNODE_NORMAL);
if (status!=CR_SUCCESS)
{
KdPrint(( "CM_Locate_DevNode failed: %x\n ",status));
return ;
}
//刷新
status = CM_Reenumerate_DevNode(devInst,0);
if (status !=CR_SUCCESS)
{
KdPrint(( "CM_Reenumerate_DevNode failed: %x\n ",status));
return ;
}
return ;
}