@@ -314,22 +314,34 @@ NTSTATUS SarIrpDeviceControl(PDEVICE_OBJECT deviceObject, PIRP irp)
314
314
UNICODE_STRING filterAltitude;
315
315
316
316
RtlUnicodeStringInit (&filterAltitude, L" 360000" );
317
- ExAcquireFastMutex (&extension->mutex );
317
+ KeEnterCriticalRegion ();
318
+ ExAcquireFastMutexUnsafe (&extension->mutex );
318
319
319
320
if (extension->filterCookie .QuadPart ) {
320
- ExReleaseFastMutex (&extension->mutex );
321
+ ExReleaseFastMutexUnsafe (&extension->mutex );
322
+ KeLeaveCriticalRegion ();
321
323
ntStatus = STATUS_RESOURCE_IN_USE;
322
324
break ;
323
325
}
324
326
327
+ ntStatus = SarCopyProcessUser (
328
+ PsGetCurrentProcess (), &extension->filterUser );
329
+
330
+ if (!NT_SUCCESS (ntStatus)) {
331
+ ExReleaseFastMutexUnsafe (&extension->mutex );
332
+ KeLeaveCriticalRegion ();
333
+ break ;
334
+ }
335
+
325
336
ntStatus = CmRegisterCallbackEx (
326
337
SarRegistryCallback,
327
338
&filterAltitude,
328
339
deviceObject->DriverObject ,
329
340
extension,
330
341
&extension->filterCookie ,
331
342
nullptr );
332
- ExReleaseFastMutex (&extension->mutex );
343
+ ExReleaseFastMutexUnsafe (&extension->mutex );
344
+ KeLeaveCriticalRegion ();
333
345
break ;
334
346
}
335
347
case SAR_SEND_FORMAT_CHANGE_EVENT:
@@ -361,6 +373,27 @@ VOID SarUnload(PDRIVER_OBJECT driverObject)
361
373
if (extension->filterCookie .QuadPart ) {
362
374
CmUnRegisterCallback (extension->filterCookie );
363
375
}
376
+
377
+ if (extension->filterUser ) {
378
+ ExFreePool (extension->filterUser );
379
+ }
380
+ }
381
+
382
+ BOOL SarFilterMatchesCurrentProcess (SarDriverExtension *extension)
383
+ {
384
+ PTOKEN_USER tokenUser = nullptr ;
385
+ NTSTATUS status = SarCopyProcessUser (PsGetCurrentProcess (), &tokenUser);
386
+
387
+ if (!NT_SUCCESS (status)) {
388
+ return FALSE ;
389
+ }
390
+
391
+ BOOL isMatch = RtlEqualSid (
392
+ extension->filterUser ->User .Sid ,
393
+ tokenUser->User .Sid );
394
+
395
+ ExFreePool (tokenUser);
396
+ return isMatch;
364
397
}
365
398
366
399
NTSTATUS SarFilterMMDeviceQuery (
@@ -530,6 +563,10 @@ NTSTATUS SarRegistryCallback(PVOID context, PVOID argument1, PVOID argument2)
530
563
break ;
531
564
}
532
565
566
+ if (!SarFilterMatchesCurrentProcess (extension)) {
567
+ break ;
568
+ }
569
+
533
570
return SarFilterMMDeviceQuery (
534
571
queryInfo, &wrapperRegistrationPath);
535
572
}
@@ -556,6 +593,10 @@ NTSTATUS SarRegistryCallback(PVOID context, PVOID argument1, PVOID argument2)
556
593
break ;
557
594
}
558
595
596
+ if (!SarFilterMatchesCurrentProcess (extension)) {
597
+ break ;
598
+ }
599
+
559
600
return SarFilterMMDeviceEnum (
560
601
queryInfo, &wrapperRegistrationPath);
561
602
}
0 commit comments