32 _In_ PDRIVER_OBJECT DriverObject,
33 _In_ PUNICODE_STRING RegistryPath
38 _In_ FLT_FILTER_UNLOAD_FLAGS Flags
43 _In_ PCFLT_RELATED_OBJECTS FltObjects,
44 _In_ FLT_INSTANCE_SETUP_FLAGS Flags,
45 _In_ DEVICE_TYPE VolumeDeviceType,
46 _In_ FLT_FILESYSTEM_TYPE VolumeFilesystemType
52 CdoInitializeDebugLevel (
53 _In_ PUNICODE_STRING RegistryPath
75 #pragma alloc_text(INIT, DriverEntry) 78 #pragma alloc_text(INIT, CdoInitializeDebugLevel) 81 #pragma alloc_text(PAGE, CdoUnload) 88 _In_ PDRIVER_OBJECT DriverObject,
89 _In_ PUNICODE_STRING RegistryPath
99 CONST FLT_REGISTRATION filterRegistration = {
100 sizeof( FLT_REGISTRATION ),
101 FLT_REGISTRATION_VERSION,
114 RtlZeroMemory( &Globals,
sizeof( Globals ) );
122 CdoInitializeDebugLevel( RegistryPath );
131 (
"[Cdo]: Driver being loaded\n") );
137 ExInitializeResourceLite( &Globals.
Resource );
149 status = FltRegisterFilter( DriverObject,
153 if (!NT_SUCCESS( status )) {
155 ExDeleteResourceLite( &Globals.
Resource );
163 status = CdoCreateControlDeviceObject( DriverObject );
165 if (!NT_SUCCESS( status )) {
167 FltUnregisterFilter( Globals.
Filter );
168 ExDeleteResourceLite( &Globals.
Resource );
176 status = FltStartFiltering( Globals.
Filter );
178 if (!NT_SUCCESS( status )) {
181 FltUnregisterFilter( Globals.
Filter );
182 ExDeleteResourceLite( &Globals.
Resource );
192 CdoInitializeDebugLevel (
193 _In_ PUNICODE_STRING RegistryPath
213 OBJECT_ATTRIBUTES attributes;
218 UCHAR buffer[
sizeof( KEY_VALUE_PARTIAL_INFORMATION ) +
sizeof( LONG )];
220 Globals.DebugLevel = DEBUG_TRACE_ERROR;
226 InitializeObjectAttributes( &attributes,
228 OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
232 status = ZwOpenKey( &driverRegKey,
236 if (NT_SUCCESS( status )) {
242 RtlInitUnicodeString( &valueName, L
"DebugLevel" );
244 status = ZwQueryValueKey( driverRegKey,
251 if (NT_SUCCESS( status )) {
253 Globals.DebugLevel = *((PULONG) &(((PKEY_VALUE_PARTIAL_INFORMATION) buffer)->Data));
261 ZwClose( driverRegKey );
269 _In_ FLT_FILTER_UNLOAD_FLAGS Flags
296 (
"[Cdo]: Unloading driver\n") );
303 CdoAcquireResourceShared( &Globals.
Resource );
306 !
FlagOn(Flags,FLTFL_FILTER_UNLOAD_MANDATORY)) {
308 DebugTrace( DEBUG_TRACE_LOAD_UNLOAD | DEBUG_TRACE_ERROR,
309 (
"[Cdo]: Fail unloading driver since the unload is optional and the CDO is open\n") );
310 CdoReleaseResource( &Globals.
Resource );
311 return STATUS_FLT_DO_NOT_DETACH;
319 FltUnregisterFilter( Globals.
Filter );
324 CdoReleaseResource( &Globals.
Resource );
326 ExDeleteResourceLite( &Globals.
Resource );
328 return STATUS_SUCCESS;
338 _In_ PCFLT_RELATED_OBJECTS FltObjects,
339 _In_ FLT_INSTANCE_SETUP_FLAGS Flags,
340 _In_ DEVICE_TYPE VolumeDeviceType,
341 _In_ FLT_FILESYSTEM_TYPE VolumeFilesystemType
370 return STATUS_FLT_DO_NOT_ATTACH;
NTSTATUS CdoUnload(_In_ FLT_FILTER_UNLOAD_FLAGS Flags)
DRIVER_INITIALIZE DriverEntry
NTSTATUS CdoInstanceSetup(_In_ PCFLT_RELATED_OBJECTS FltObjects, _In_ FLT_INSTANCE_SETUP_FLAGS Flags, _In_ DEVICE_TYPE VolumeDeviceType, _In_ FLT_FILESYSTEM_TYPE VolumeFilesystemType)
#define DebugTrace(Level, Data)
NcLoadRegistryStringRetry KeyValuePartialInformation
#define GLOBAL_DATA_F_CDO_OPEN_REF
UNREFERENCED_PARAMETER(FileObject)
NcLoadRegistryStringRetry NULL
VOID CdoDeleteControlDeviceObject(VOID)
PDRIVER_OBJECT FilterDriverObject