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 ;
}


...全文
258 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
曹大夯 2010-06-02
  • 打赏
  • 举报
回复
驱动对应的设备发生硬件PNP类型的变化的时候,PNP Manager会发PNP信息给对应的驱动的。
设备驱动如果想知道硬件设备的其他信息,可以注册中断或者轮询设备状态来知道硬件变化。


没钱吃饭 2010-06-02
  • 打赏
  • 举报
回复
那么,我在kernel 中,如何实现"扫描硬件改动”这一功能?有什么具体函数,还是只能发IRP,如果是发IRP,请给个参考,吾感激涕零!
大熊猫侯佩 2010-06-02
  • 打赏
  • 举报
回复
打日志,调试
曹大夯 2010-06-01
  • 打赏
  • 举报
回复
CM_Locate_DevNode等相关的函数是应用程序才能使用的代码。不能用在Kernel驱动中的。

http://msdn.microsoft.com/en-us/library/ff549794(v=VS.85).aspx
Public PnP Configuration Manager Functions
This section describes the Plug and Play (PnP) Configuration Manager functions that are used by class installers, co-installers, or device installation applications.


class installer, co-installer, device installation applications都不是kernel driver.

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧