20楼#
发布于:2004-03-31 17:55
老大你太伟大了,终于搞定,不过我觉得我写的那个addr.QuadPart=-1;
Status = NdisAllocateMemory(pBuff,2048,0,addr);应该没错 还有问一下那个NdisMRegisterDevice的 IN PDRIVER_DISPATCH MajorFunctions[]参数怎么写,老大帮帮忙 [编辑 - 4/1/04 by aulphar] |
|
21楼#
发布于:2004-04-01 17:51
老大NdisMRegisterDevice的
IN PDRIVER_DISPATCH MajorFunctions[]参数怎么写,拜托了 |
|
22楼#
发布于:2004-04-02 09:27
DispatchTable[IRP_MJ_CREATE] = PtDispatch;
DispatchTable[IRP_MJ_CLEANUP] = PtDispatch; DispatchTable[IRP_MJ_CLOSE] = PtDispatch; DispatchTable[IRP_MJ_DEVICE_CONTROL] = 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 ); |
|
23楼#
发布于:2004-04-02 15:00
老大我在某个头文件中包含
NTSTATUS PacketDispatch( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); 编译就编不过 packet.h(49) : error C2146: syntax error : missing ')' before identifier 'Irp' packet.h(49) : error C2081: 'PIRP' : name in formal parameter list illegal packet.h(49) : error C2061: syntax error : identifier 'Irp' packet.h(49) : error C2059: syntax error : ';' packet.h(50) : error C2059: syntax error : ')' 同样的地方把PIRP改成其他类型如PUINT就没问题,我已经包含了ntddk.h到底是为什么呀,搞了一个早上都没搞好,老大快帮忙 |
|
24楼#
发布于:2004-04-02 16:03
上面问题还没解决,
还有老大IN PDRIVER_DISPATCH MajorFunctions[] 不是把DriverObject->MajorFunction传进去而是自己定义 PDRIVER_DISPATCH DispatchTable[IRP_MJ_MAXIMUM_FUNCTION+1]; 然后往里面传呀 |
|
25楼#
发布于:2004-04-02 16:05
#define MINIPORT_WDM 1
或则 #define NDIS_WDM 1 或 #define BINARY_COMPATIBLE 0 到 prexsim.h 具体我记不请了。 |
|
26楼#
发布于:2004-04-02 17:28
老大我用#define BINARY_COMPATIBLE 0编过了不过运行status不是success
所有相关的如下 #define NT_DEVICE_NAME L"\\Device\\MPassthru" #define DOS_DEVICE_NAME L"\\DosDevices\\MPassthru" PDEVICE_OBJECT pDeviceObject = NULL; NDIS_HANDLE mNdisDeviceHandle= NULL; UNICODE_STRING mDeviceName; UNICODE_STRING mSymbolicName; PDRIVER_DISPATCH DispatchTable[IRP_MJ_MAXIMUM_FUNCTION+1]; NdisInitUnicodeString(&mDeviceName, NT_DEVICE_NAME); NdisInitUnicodeString(&mSymbolicName,DOS_DEVICE_NAME); DispatchTable[IRP_MJ_CREATE] = PassthruDispatch; DispatchTable[IRP_MJ_CLEANUP] = PassthruDispatch; DispatchTable[IRP_MJ_CLOSE] = PassthruDispatch; DispatchTable[IRP_MJ_DEVICE_CONTROL] = PassthruDispatch; DispatchTable[IRP_MJ_READ] = PassthruDispatch; //紧接NdisMInitializeWrapper Status = NdisMRegisterDevice( WrapperHandle, &mDeviceName, &mSymbolicName, &DispatchTable[0], &pDeviceObject, &mNdisDeviceHandle ); WrapperHandle是NdisMInitializeWrapper带出来的 结果是不成功,帮我看看吧 |
|
27楼#
发布于:2004-04-02 17:40
应该是
#define NT_DEVICE_NAME L"\\Device\\MPassthru" #define DOS_DEVICE_NAME L"\\DosDevices\\MPassthru" 吧 |
|
28楼#
发布于:2004-04-02 17:48
老大是不是写错了,你写的更我前两行完全一样
|
|
29楼#
发布于:2004-04-02 17:54
sorry
#define NT_DEVICE_NAME L"\\Device\\MPassthru" #define DOS_DEVICE_NAME L"\\DosDevices\\MPassthru" |
|
30楼#
发布于:2004-04-02 17:56
靠!
我明明改了吗,怎么一发就变了。 你把一个反斜杠,该为两个反斜杠 |
|
31楼#
发布于:2004-04-04 16:05
我写的是两斜线,还是不行返回的结果是NDIS_STATUS_NOT_SUPPORTED按照DDK的说法是调用者不是MINIPORT我这个是中间层,当然不是MINIPORT,那到底要怎么样才行
|
|
32楼#
发布于:2004-04-04 16:37
我放在NDISIMRegisterLayeredMiniport之后就可以了,能不能解释一下是为什么,还有我应该在什么时候调用NdisMDeregisterDevice
到底是halt还是unload,还是无所谓 |
|
33楼#
发布于:2004-04-06 09:10
老大我在mphalt的最后写NDISMDregisterDevice居然说NDIS.sys有IRPlevel错误,到底应该在什么地方做,现在我那个驱动卸载不了,我只好重装系统了,老大快来帮忙
|
|
上一页
下一页