阅读:1445回复:6
98下注册了一个deveice不能用 为什么??
注册device的程序如下
#define LINKNAME_STRING L\"\\\\DosDevices\\\\IM\" #define NTDEVICE_STRING L\"\\\\Device\\\\IM\" NDIS_STATUS PtRegisterDevice( VOID ) /*++ Routine Description: Register an ioctl interface - a device object to be used for this purpose is created by NDIS when we call NdisMRegisterDevice. This routine is called whenever a new miniport instance is initialized. However, we only create one global device object, when the first miniport instance is initialized. This routine handles potential race conditions with PtDeregisterDevice via the ControlDeviceState and MiniportCount variables. NOTE: do not call this from DriverEntry; it will prevent the driver from being unloaded (e.g. on uninstall). Arguments: None Return Value: NDIS_STATUS_SUCCESS if we successfully register a device object. --*/ { NDIS_STATUS Status = NDIS_STATUS_SUCCESS; UNICODE_STRING DeviceName; UNICODE_STRING DeviceLinkUnicodeString; PDRIVER_DISPATCH DispatchTable[IRP_MJ_MAXIMUM_FUNCTION]; UINT i; DBGPRINT((\"==>PtRegisterDevice\\n\")); NdisAcquireSpinLock(&GlobalLock); ++MiniportCount; if (1 == MiniportCount) { ASSERT(ControlDeviceState != PS_DEVICE_STATE_CREATING); // // Another thread could be running PtDeregisterDevice on // behalf of another miniport instance. If so, wait for // it to exit. // while (ControlDeviceState != PS_DEVICE_STATE_READY) { NdisReleaseSpinLock(&GlobalLock); NdisMSleep(10); NdisAcquireSpinLock(&GlobalLock); } ControlDeviceState = PS_DEVICE_STATE_CREATING; NdisReleaseSpinLock(&GlobalLock); for (i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++) { DispatchTable = PtDispatch; } NdisInitUnicodeString(&DeviceName, NTDEVICE_STRING); NdisInitUnicodeString(&DeviceLinkUnicodeString, LINKNAME_STRING); // // Create a device object and register our dispatch handlers // Status = NdisMRegisterDevice( NdisWrapperHandle, &DeviceName, &DeviceLinkUnicodeString, &DispatchTable[0], &ControlDeviceObject, &NdisDeviceHandle ); NdisAcquireSpinLock(&GlobalLock); ControlDeviceState = PS_DEVICE_STATE_READY; } NdisReleaseSpinLock(&GlobalLock); DBGPRINT((\"<==PtRegisterDevice: %x\\n\", Status)); return (Status); } 调用完成status返回0成功注册。 用 lpAdapter->hFile=CreateFile(lpAdapter->SymbolicLink, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL ); 调用 lpAdapter->SybolicLink=\"\\\\\\\\.\\\\IM\" 返回INVALID_HANDLE_VALUE 错误代码为2 (文件没找到) createfile在2000 nt下都是运行正常的。。 实在搞的头疼死了 。。。 没法调下去了。。。 谁能帮帮忙 |
|
最新喜欢:wingma... |
沙发#
发布于:2001-12-10 18:56
你用工具看看,
你打算用这个干啥? |
|
|
板凳#
发布于:2001-12-10 21:07
用跟踪工具rterm98出来的信息就是 注册成功 打不开
还有什么工具可以看?softice还没用过。 |
|
地板#
发布于:2001-12-11 09:57
你用他赶啥?
|
|
|
地下室#
发布于:2001-12-12 15:01
用 CreateFile(pDeviceFileName,
0, 0, NULL, OPEN_EXISTING, 0, NULL );试试 |
|
|
5楼#
发布于:2001-12-12 22:29
总算找出来错误了
传进去的设备名竟然是\"\\\\\\\\.\\\\IM\\\\\" 奇怪的是这个设备名在nt,2000下都可以打开 我就没去查这个设备名 最后实在没办法打印出来吓了一大跳 |
|
6楼#
发布于:2005-03-15 17:35
你是怎么看到传进取的文件名的,
我现在遇到与你一样的问题. 你快来帮我啊 |
|