阅读:1289回复:1
好人快出现吧
98操作系统,中间层驱动程序,
现象:应用程序CreateFile返回错误:系统找不到该文件. 现象2: VOID PtBindAdapter( OUT PNDIS_STATUS Status, IN NDIS_HANDLE BindContext, IN PNDIS_STRING DeviceName, IN PVOID SystemSpecific1, IN PVOID SystemSpecific2) { NDIS_STATUS err; NDIS_HANDLE ConfigHandle; PADAPT pAdapt; UINT MediumIndex; WCHAR RegPath[256]; PNDIS_STRING RegStr = (PNDIS_STRING)SystemSpecific1; ANSI_STRING TempStr; DbgPrint(\"PtBindAdapter: %ls\\n\", DeviceName->Buffer); 这里是乱码 PtBindAdapter: __ 如果是DbgPrint(\"PtBindAdapter: %ls\\n\", DeviceName); 结果是 PtBindAdapter: ll__ 我的程序: 应用程序中: char SymbolicLink[64]; memset(SymbolicLink,0,sizeof(SymbolicLink)); wsprintf(SymbolicLink, TEXT (\"\\\\\\\\.\\\\MYDEVICE\")); hDeviceHandle = CreateFile( SymbolicLink, GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, 0); 打开失败. 驱动程序: #define PPPOE_DEVICE_NAME L\"\\\\Device\\\\MYDEVICE\" #define PPPOE_DOS_DEVICE_NAME L\"\\\\DosDevices\\\\MYDEVICE\" NDIS_STATUS Status = NDIS_STATUS_SUCCESS; PDEVICE_OBJECT DeviceObject; UNICODE_STRING DeviceName; PDRIVER_DISPATCH DispatchTable[IRP_MJ_MAXIMUM_FUNCTION]; UINT i; DbgPrint(\"PtRegisterDevice 98\\n\"); NdisAcquireSpinLock(&GlobalLock); MiniportCount++; if (MiniportCount == 1) { 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(1); NdisAcquireSpinLock(&GlobalLock); } ControlDeviceState = PS_DEVICE_STATE_CREATING; for (i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++) { DispatchTable = PtDispatch; } RtlInitUnicodeString(&DeviceName, PPPOE_DEVICE_NAME); RtlInitUnicodeString(&DosDeviceName, PPPOE_DOS_DEVICE_NAME); Status = IoCreateDevice( DriverObject, 0, &DeviceName, FILE_DEVICE_UNKNOWN, 0, FALSE, &DeviceObject); if (Status == NDIS_STATUS_SUCCESS) { DbgPrint(\"IoCreateDevice ok\\n\"); DeviceObject->Flags |= DO_DIRECT_IO; ControlDeviceState = PS_DEVICE_STATE_READY; } else { DbgPrint(\"Failed to create device object for dispatch handlers\\n\"); ControlDeviceState = PS_DEVICE_STATE_FAILED; } Status = IoCreateSymbolicLink( &DosDeviceName, &DeviceName ); if (!NT_SUCCESS(Status)) // If we couldn\'t create the link then { DbgPrint(\"Failed to create device SymbolicLink\\n\"); IoDeleteSymbolicLink(&DosDeviceName); } DbgPrint(\"IoCreateSymbolicLink ok:%d\\n\", Status); } } 这里 IoCreateDevice IoCreateSymbolicLink 都成功了 请问:打开应用程序为什么不能调用成功CreateFile呢? 鞠躬了. |
|
沙发#
发布于:2005-04-01 19:15
好人没有,还是自己回复吧
哈哈,居然是这个问题, 自己给自己一巴掌 没有将dispatch和DriverObjects关连 |
|