为什么ndisfregisterfilterdriver返回ndis_status_failure?
题
我正在尝试编写一个NDIS中间过滤器驱动程序,但我在一切都发生了什么之前陷入了困境。
我的代码尚未做任何事情,除了尝试注册过滤器驱动程序之外:
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath)
{
NDIS_FILTER_DRIVER_CHARACTERISTICS FChars;
NDIS_STRING ServiceName, UniqueName, FriendlyName;
NDIS_STATUS Status;
UNUSED(RegistryPath);
g_FilterObject = DriverObject;
RtlInitUnicodeString(&ServiceName, MIP_SERVICE_NAME);
RtlInitUnicodeString(&FriendlyName, MIP_FRIENDLY_NAME);
RtlInitUnicodeString(&UniqueName, MIP_UNIQUE_NAME);
NdisZeroMemory(&FChars, sizeof(NDIS_FILTER_DRIVER_CHARACTERISTICS));
FChars.Header.Type = NDIS_OBJECT_TYPE_FILTER_DRIVER_CHARACTERISTICS;
FChars.Header.Size = sizeof(NDIS_FILTER_DRIVER_CHARACTERISTICS);
FChars.Header.Revision = NDIS_FILTER_CHARACTERISTICS_REVISION_1;
FChars.MajorNdisVersion = 6;
FChars.MinorNdisVersion = 0;
FChars.MajorDriverVersion = 1;
FChars.MinorDriverVersion = 0;
FChars.Flags = 0;
FChars.FriendlyName = FriendlyName;
FChars.UniqueName = UniqueName;
FChars.ServiceName = ServiceName;
FChars.AttachHandler = FilterAttach;
FChars.DetachHandler = FilterDetach;
FChars.RestartHandler = FilterRestart;
FChars.PauseHandler = FilterPause;
FChars.SetOptionsHandler = FilterRegisterOptions;
FChars.SetFilterModuleOptionsHandler = FilterSetModuleOptions;
FChars.SendNetBufferListsHandler = FilterSend;
FChars.ReturnNetBufferListsHandler = FilterReturnNetBufferLists;
FChars.SendNetBufferListsCompleteHandler = FilterSendComplete;
FChars.ReceiveNetBufferListsHandler = FilterReceive;
FChars.CancelSendNetBufferListsHandler = FilterCancelSend;
FChars.DevicePnPEventNotifyHandler = FilterDevicePnPEvent;
FChars.NetPnPEventHandler = FilterNetPnPEvent;
FChars.StatusHandler = FilterStatus;
DriverObject->DriverUnload = FilterUnload;
Status = NdisFRegisterFilterDriver(DriverObject,
(NDIS_HANDLE)g_FilterObject,
&FChars,
&g_FilterHandle);
if (Status != NDIS_STATUS_SUCCESS)
{
MDBG("Failed to register filter driver %x", Status);
return Status;
}
return NDIS_STATUS_SUCCESS;
}
.
所有其他功能都为空(某些跟踪代码除外)。他们无所谓。
ndisfregisterfilterdriver始终返回ndis_status_failure。文档没有描述为什么会发生这种情况。 (它不应该是.inf文件的问题,因为我尝试了从DDK的示例驱动程序的文字副本。)
解决方案
I don't see anything wrong with the code you've posted. Is MIP_UNIQUE_NAME
defined to be identical to the NetCfgInstanceId
from the INF? (Incidentally, remember to generate a new GUID different from the sample GUID — I've seen collisions, and it's not pretty).
不隶属于 StackOverflow