Advertisement
yorath

FsmPreCreate

Aug 9th, 2013
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.18 KB | None | 0 0
  1. FLT_PREOP_CALLBACK_STATUS FLTAPI
  2.     FsmPreCreate (
  3.     __inout PFLT_CALLBACK_DATA Data,
  4.     __in PCFLT_RELATED_OBJECTS FltObjects,
  5.     __deref_out_opt PVOID *CompletionContext
  6.     )
  7. {
  8.     NTSTATUS Status = STATUS_UNSUCCESSFUL;
  9.     PUNICODE_STRING FilePath = NULL;
  10.     PUNICODE_STRING Path = NULL;
  11.  
  12.     UNREFERENCED_PARAMETER(CompletionContext);
  13.  
  14.     if (FsmpIsMyProcess(IoThreadToProcess(Data->Thread))) {
  15.         return FLT_PREOP_SUCCESS_NO_CALLBACK;
  16.     }
  17.  
  18.     Status = FsmpGetCurrentFilePath(Data, FltObjects, &FilePath);
  19.     if (!NT_SUCCESS(Status)) {
  20.         return FLT_PREOP_SUCCESS_NO_CALLBACK;
  21.     }
  22.  
  23.     if (MatchStringArray(FilePath, FsmPathsToProtect)) {
  24.         if (FlagOn(Data->Iopb->Parameters.Create.SecurityContext->DesiredAccess,
  25.             DELETE | FILE_WRITE_DATA | FILE_WRITE_EA | FILE_WRITE_ATTRIBUTES |
  26.             FILE_APPEND_DATA | WRITE_DAC | WRITE_OWNER) ||
  27.             Data->Iopb->Parameters.Create.Options >> 24 != FILE_OPEN) {
  28.                 Data->IoStatus.Status = STATUS_ACCESS_DENIED;
  29.                 Data->IoStatus.Information = 0;
  30.                 return FLT_PREOP_COMPLETE;
  31.         }
  32.     }
  33.  
  34.     return FLT_PREOP_SUCCESS_WITH_CALLBACK;
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement