/*++
Module Name:
Filter.c
Abstract:
Sample NDIS Lightweight filter driver
--*/
#include "precomp.h"
#define __FILENUMBER 'PNPF'
// This directive puts the DriverEntry function into the INIT segment of the
// driver. To conserve memory, the code will be discarded when the driver's
// DriverEntry function returns. You can declare other functions used only
// during initialization here.
#pragma NDIS_INIT_FUNCTION(DriverEntry)
//
// Global variables
//
NDIS_HANDLE FilterDriverHandle; // NDIS handle for filter driver
NDIS_HANDLE FilterDriverObject;
NDIS_HANDLE NdisFilterDeviceHandle = NULL;
PDEVICE_OBJECT NdisDeviceObject = NULL;
FILTER_LOCK FilterListLock;
LIST_ENTRY FilterModuleList;
NDIS_FILTER_PARTIAL_CHARACTERISTICS DefaultChars = {
{ 0, 0, 0},
0,
FilterSendNetBufferLists,
FilterSendNetBufferListsComplete,
NULL,
FilterReceiveNetBufferLists,
FilterReturnNetBufferLists
};
_Use_decl_annotations_
NTSTATUS
DriverEntry(
PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath
)
/*++
Routine Description:
First entry point to be called, when this driver is loaded.
Register with NDIS as a filter driver and create a device
for communication with user-mode.
Arguments:
DriverObject - pointer to the system's driver object structure
for this driver
RegistryPath - system's registry path for this driver
Return Value:
STATUS_SUCCESS if all initialization is successful, STATUS_XXX
error code if not.
--*/
{
NDIS_STATUS Status;
NDIS_FILTER_DRIVER_CHARACTERISTICS FChars;
NDIS_STRING ServiceName = RTL_CONSTANT_STRING(FILTER_SERVICE_NAME);
NDIS_STRING UniqueName = RTL_CONSTANT_STRING(FILTER_UNIQUE_NAME);
NDIS_STRING FriendlyName = RTL_CONSTANT_STRING(FILTER_FRIENDLY_NAME);
BOOLEAN bFalse = FALSE;
UNREFERENCED_PARAMETER(RegistryPath);
DEBUGP(DL_TRACE, "===>DriverEntry...\n");
FilterDriverObject = DriverObject;
do
{
NdisZeroMemory(&FChars, sizeof(NDIS_FILTER_DRIVER_CHARACTERISTICS));
FChars.Header.Type = NDIS_OBJECT_TYPE_FILTER_DRIVER_CHARACTERISTICS;
FChars.Header.Size = sizeof(NDIS_FILTER_DRIVER_CHARACTERISTICS);
#if NDIS_SUPPORT_NDIS61
FChars.Header.Revision = NDIS_FILTER_CHARACTERISTICS_REVISION_2;
#else
FChars.Header.Revision = NDIS_FILTER_CHARACTERISTICS_REVISION_1;
#endif
FChars.MajorNdisVersion = FILTER_MAJOR_NDIS_VERSION;
FChars.MinorNdisVersion = FILTER_MINOR_NDIS_VERSION;
FChars.MajorDriverVersion = 1;
FChars.MinorDriverVersion = 0;
FChars.Flags = 0;
FChars.FriendlyName = FriendlyName;
FChars.UniqueName = UniqueName;
FChars.ServiceName = ServiceName;
//
// TODO: Most handlers are optional, however, this sample includes them
// all for illustrative purposes. If you do not need a particular
// handler, set it to NULL and NDIS will more efficiently pass the
// operation through on your behalf.
//
FChars.SetOptionsHandler = FilterRegisterOptions;
FChars.AttachHandler = FilterAttach;
FChars.DetachHandler = FilterDetach;
FChars.RestartHandler = FilterRestart;
FChars.PauseHandler = FilterPause;
FChars.SetFilterModuleOptionsHandler = FilterSetModuleOptions;
FChars.OidRequestHandler = FilterOidRequest;
FChars.OidRequestCompleteHandler = FilterOidRequestComplete;
FChars.CancelOidRequestHandler = FilterCancelOidRequest;
FChars.SendNetBufferListsHandler = FilterSendNetBufferLists;
FChars.ReturnNetBufferListsHandler = FilterReturnNetBufferLists;
FChars.SendNetBufferListsCompleteHandler = FilterSendNetBufferListsComplete;
FChars.ReceiveNetBufferListsHandler = FilterReceiveNetBufferLists;
FChars.DevicePnPEventNotifyHandler = FilterDevicePnPEventNotify;
FChars.NetPnPEventHandler = FilterNetPnPEvent;
FChars.StatusHandler = FilterStatus;
FChars.CancelSendNetBufferListsHandler = FilterCancelSendNetBufferLists;
DriverObject->DriverUnload = FilterUnload;
FilterDriverHandle = NULL;
//
// Initialize spin locks
//
FILTER_INIT_LOCK(&FilterListLock);
InitializeListHead(&FilterModuleList);
Status = NdisFRegisterFilterDriver(DriverObject,
(NDIS_HANDLE)FilterDriverObject,
&FChars,
&FilterDriverHandle);
if (Status != NDIS_STATUS_SUCCESS)
{
DEBUGP(DL_WARN, "Register filter driver failed.\n");
break;
}
Status = PoseidonRegisterDevice();
if (Status != NDIS_STATUS_SUCCESS)
{
NdisFDeregisterFilterDriver(FilterDriverHandle);
FILTER_FREE_LOCK(&FilterListLock);
DEBUGP(DL_WARN, "Register device for the filter driver failed.\n");
break;
}
}
while(bFalse);
DEBUGP(DL_TRACE, "<===DriverEntry, Status = %8x\n", Status);
return Status;
}
_Use_decl_annotations_
NDIS_STATUS
FilterRegisterOptions(
NDIS_HANDLE NdisFilterDriverHandle,
NDIS_HANDLE FilterDriverContext
)
/*++
Routine Description:
Register optional handlers with NDIS. This sample does not happen to
have any optional handlers to register, so this routine does nothing
and could simply have been omitted. However, for illustrative purposes,
it is presented here.
Arguments:
NdisFilterDriverHandle - pointer the driver handle received from
NdisFRegisterFilterDriver
FilterDriverContext - pointer to our context passed into
NdisFRegisterFilterDriver
Return Value:
NDIS_STATUS_SUCCESS
--*/
{
DEBUGP(DL_TRACE, "===>FilterRegisterOptions\n");
ASSERT(NdisFilterDriverHandle == FilterDriverHandle);
ASSERT(FilterDriverContext == (NDIS_HANDLE)FilterDriverObject);
if ((NdisFilterDriverHandle != (NDIS_HANDLE)FilterDriverHandle) ||
(FilterDriverContext != (NDIS_HANDLE)FilterDriverObject))
{
return NDIS_STATUS_INVALID_PARAMETER;
}
DEBUGP(DL_TRACE, "<===FilterRegisterOptions\n");
return NDIS_STATUS_SUCCESS;
}
_Use_decl_annotations_
NDIS_STATUS
FilterAttach(
NDIS_HANDLE NdisFilterHandle,
NDIS_HANDLE FilterDriverContext,
PNDIS_FILTER_ATTACH_PARAMETERS AttachParameters
)
/*++
Routine Description:
Filter attach routine.
Create filter's context, allocate NetBufferLists and NetBuffer pools and any
other resources, and read configuration if needed.
Arguments:
NdisFilterHandle - Specify a handle identifying this instance of the filter. FilterAttach
should save this handle. It is a required parameter in subsequent calls
to NdisFxxx functions.
FilterDriverContext - Filter driver context passed to NdisFRegisterFilterDriver.
AttachParameters - attach parameters
Return Value:
NDIS_STATUS_SUCCESS: FilterAttach successfully allocated and initialize data structures
for this filter instance.
NDIS_STATUS_RESOURCES: FilterAttach failed due to insufficient resources.
NDIS_STATUS_FAILURE: FilterAttach could not set up this instance of this filter and it has called
NdisWriteErrorLogEntry with parameters specifying the reason for failure.
N.B.: FILTER can use NdisRegisterDeviceEx to create a device, so the upper
layer can
没有合适的资源?快使用搜索试试~ 我知道了~
ndis.zip_ndis_ndis6驱动_zip
共133个文件
tlog:62个
obj:19个
c:10个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 128 浏览量
2022-09-20
12:07:01
上传
评论
收藏 19.39MB ZIP 举报
温馨提示
ndis 6 simple driver
资源推荐
资源详情
资源评论
收起资源包目录
ndis.zip_ndis_ndis6驱动_zip (133个子文件)
filter.c 63KB
flt_dbg.c 10KB
device.c 8KB
arp.c 3KB
icmp.c 792B
ip.c 780B
ethernet.c 532B
tcp.c 494B
udp.c 395B
precomp.c 20B
poseidon.cat 2KB
Poseidon.cer 784B
Browse.VC.db 16.38MB
Poseidon.vcxproj.filters 3KB
filter.h 14KB
flt_dbg.h 4KB
filteruser.h 4KB
ip.h 2KB
arp.h 2KB
icmp.h 1KB
tcp.h 345B
precomp.h 287B
udp.h 248B
ethernet.h 231B
Poseidon.inf 7KB
Poseidon.inf 7KB
Poseidon.inf 7KB
Poseidon.inf 7KB
Poseidon.inf 7KB
Poseidon.inf 7KB
b384ddbe8f9787a0.ipch 21.88MB
8852fe91d3065bf0.ipch 21.31MB
Poseidon.lastbuildstate 235B
Poseidon.lastbuildstate 233B
Poseidon.Build.CppClean.log 4KB
Poseidon.log 766B
Poseidon.log 519B
precomp.obj 301KB
precomp.obj 292KB
filter.obj 66KB
filter.obj 38KB
device.obj 13KB
flt_dbg.obj 12KB
device.obj 10KB
arp.obj 7KB
icmp.obj 4KB
icmp.obj 4KB
ip.obj 3KB
ip.obj 3KB
tcp.obj 3KB
tcp.obj 3KB
ethernet.obj 2KB
udp.obj 2KB
udp.obj 2KB
ethernet.obj 2KB
flt_dbg.obj 992B
Browse.VC.opendb 42B
Poseidon.pch 6.94MB
Poseidon.pch 6.88MB
Poseidon.pdb 1.29MB
vc142.pdb 860KB
vc142.pdb 844KB
filter.rc 1KB
filter.res 1KB
Poseidon.sln 3KB
.suo 52KB
Poseidon.sys 30KB
Poseidon.sys 30KB
CL.command.1.tlog 16KB
link.delete.1.tlog 14KB
CL.read.1.tlog 12KB
CL.command.1.tlog 12KB
CL.read.1.tlog 11KB
CL.write.1.tlog 5KB
CL.write.1.tlog 5KB
link.read.1.tlog 4KB
inf2cat-expand.read.1.tlog 4KB
link.command.1.tlog 4KB
inf2cat-expand.write.1.tlog 4KB
rc.read.1.tlog 3KB
inf2cat.read.1.tlog 3KB
link.write.1.tlog 2KB
rc.command.1.tlog 1KB
signtool.read.1.tlog 854B
inf2cat-expand.10732.read.1.tlog 752B
inf2cat-expand.14856.read.1.tlog 752B
signtool.write.1.tlog 530B
inf2cat-expand.14856.write.1.tlog 512B
inf2cat-expand.10732.write.1.tlog 512B
signtool.command.1.tlog 508B
stampinf.command.1.tlog 456B
stampinf.command.1.tlog 432B
Inf2Cat.command.1.tlog 424B
inf2cat-expand.7944.read.1.tlog 394B
inf2cat-expand.13520.read.1.tlog 394B
inf2cat-expand.10812.write.1.tlog 394B
inf2cat-expand.18672.write.1.tlog 394B
inf2cat-expand.3344.read.1.tlog 394B
inf2cat-expand.11524.write.1.tlog 394B
inf2cat-expand.16932.write.1.tlog 394B
共 133 条
- 1
- 2
资源评论
钱亚锋
- 粉丝: 88
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功