打开驱动文件CreateFile()参数问题?

yuanqian   2009-3-2 12:12 楼主

调用函数 CreateFile(  LPCTSTR lpFileName,   DWORD dwDesiredAccess,   DWORD dwShareMode,   LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  DWORD dwCreationDispostion,   DWORD dwFlagsAndAttributes,   HANDLE hTemplateFile);

打开对应的驱动文件,该函数应该对应XXX_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode),其中hDeviceContext应该是XXX_Init()函数
返回的设备上下文句柄,为什么我在XXX_Open函数里打印输出显示hDeviceContext为1,而不是设备句柄?

调用CreateFile("XXX0:", ) 函数时,应该去drivers\active中去查找XXX0:对应的设备句柄hWnd,然后传到XXX_Open函数里面去的,而实际上却不是这么实现的?
为什么会这样?

回复评论 (5)

应该是做了个映射吧
点赞  2009-3-2 12:37

hDeviceContext为什么没有传递到XXX_Init()函数中去? 我现在两次调用哪个该DLL驱动,需要在hDeviceContext变量在程序里去区分不同的设备
点赞  2009-3-2 13:31
应该是个比较大的随机数字啊!
点赞  2009-3-2 17:33
借题发挥一下,呵呵
为什么我用CreateFile打开不了dll,而用LoadLibrary却能打开呢?
点赞  2009-3-3 22:08
已結帖的問題要不要回呢??

1. hDeviceContext 是 xxx_Init 的返回值, 其 type 為 DWORD, 所以若其值永遠為1, 那八成你 xxx_Init 最後一行是 return TRUE;
   若真要分別, 正統的作法是在 xxx_Init 中用 LocalAlloc 自 Heap 取得一塊記憶體, 並將原程式中 Global variable 以結構方式全部放入該記憶體中, 並將該記憶體當作 xxx_Init 的回傳值, 在 xxx_Open 中要做存取時, 則透過 hDeviceContext 來取用. 這部份可參考 Serial Port 的 driver code.

2. CreateFile 的回傳值是 FileSystem 用的, 與 xxx_Init 的回傳值沒有直接的關係.

Paul, Chao @ Techware
点赞  2009-3-23 10:06
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复