9,506
社区成员
发帖
与我相关
我的任务
分享
#pragma code_seg()
extern "C"
NTSTATUS
DriverEntry
( PDRIVER_OBJECT pDO , PUNICODE_STRING pRegPath )
{
NTSTATUS status ;
PSECURITY_DESCRIPTOR sd ;
OBJECT_ATTRIBUTES oa ;
gpDo = pDO ;
AlwaysFx = FALSE ;
KeInitializeEvent ( &Fx , SynchronizationEvent , FALSE ) ;
KeInitializeEvent ( &GraspR , SynchronizationEvent , FALSE ) ;
KeInitializeEvent ( &GraspW , SynchronizationEvent , FALSE ) ;
KeInitializeEvent ( &GraspS , SynchronizationEvent , FALSE ) ;
KeInitializeEvent ( &CanInR , SynchronizationEvent , TRUE ) ;
KeInitializeEvent ( &CanInW , SynchronizationEvent , TRUE ) ;
KeInitializeEvent ( &CanInS , SynchronizationEvent , TRUE ) ;
status = FltRegisterFilter ( gpDo , &FilterRegistration , &pFilta ) ;
if ( !NT_SUCCESS (status) )
return status ;
status = FltBuildDefaultSecurityDescriptor ( &sd , FLT_PORT_ALL_ACCESS ) ;
if ( !NT_SUCCESS (status) )
return status ;
RtlInitUnicodeString ( &usCp , L"WaillerWeaver13b" ) ;
InitializeObjectAttributes ( &oa , &usCp , OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE , NULL , sd ) ;
status = FltCreateCommunicationPort ( pFilta , &KernelServerPort , &oa , NULL , (PFLT_CONNECT_NOTIFY)WnpCpConnect , (PFLT_DISCONNECT_NOTIFY)WnpCpDisconnect , (PFLT_MESSAGE_NOTIFY)WnpMessageNotify , 1 ) ;
if ( !NT_SUCCESS (status) )
return status ;
for ( short MediaInitial = 0 ; MediaInitial <= BeMd - 1 ; MediaInitial ++ )
{
RtlInitUnicodeString ( &(MediaExt[MediaInitial]) , BeMdExt[MediaInitial] ) ;
}
ReadOutA.Buffer = ReadOut ;
WriteOutA.Buffer = WriteOut ;
SetOutA.Buffer = SetOut ;
return status ;
}