30 #pragma alloc_text(PAGE, CtxPreCreate) 31 #pragma alloc_text(PAGE, CtxPostCreate) 32 #pragma alloc_text(PAGE, CtxPreCleanup) 33 #pragma alloc_text(PAGE, CtxPreClose) 34 #pragma alloc_text(PAGE, CtxPreSetInfo) 35 #pragma alloc_text(PAGE, CtxPostSetInfo) 39 FLT_PREOP_CALLBACK_STATUS
41 _Inout_ PFLT_CALLBACK_DATA Cbd,
42 _In_ PCFLT_RELATED_OBJECTS FltObjects,
43 _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
53 (
"[Ctx]: CtxPreCreate -> Enter (Cbd = %p, FileObject = %p)\n",
55 FltObjects->FileObject) );
59 (
"[Ctx]: CtxPreCreate -> Exit (Cbd = %p, FileObject = %p)\n",
61 FltObjects->FileObject) );
68 return FLT_PREOP_SUCCESS_WITH_CALLBACK;
73 FLT_POSTOP_CALLBACK_STATUS
75 _Inout_ PFLT_CALLBACK_DATA Cbd,
76 _In_ PCFLT_RELATED_OBJECTS FltObjects,
77 _Inout_opt_ PVOID CbdContext,
78 _In_ FLT_POST_OPERATION_FLAGS Flags
85 PFLT_FILE_NAME_INFORMATION nameInfo =
NULL;
86 UNICODE_STRING fileName;
89 BOOLEAN fileContextCreated, streamContextCreated, streamHandleContextReplaced;
99 (
"[Ctx]: CtxPostCreate -> Enter (Cbd = %p, FileObject = %p)\n",
101 FltObjects->FileObject) );
107 status = STATUS_SUCCESS;
113 if (!NT_SUCCESS( Cbd->IoStatus.Status )) {
115 goto CtxPostCreateCleanup;
123 status = FltGetFileNameInformation( Cbd,
124 FLT_FILE_NAME_NORMALIZED |
125 FLT_FILE_NAME_QUERY_DEFAULT,
128 if (!NT_SUCCESS( status )) {
130 DebugTrace( DEBUG_TRACE_ERROR | DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS | DEBUG_TRACE_STREAMHANDLE_CONTEXT_OPERATIONS,
131 (
"[Ctx]: CtxPostCreate -> Failed to get name information (Cbd = %p, FileObject = %p)\n",
133 FltObjects->FileObject) );
135 goto CtxPostCreateCleanup;
146 &streamContextCreated);
147 if (!NT_SUCCESS( status )) {
155 DebugTrace( DEBUG_TRACE_ERROR | DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
156 (
"[Ctx]: CtxPostCreate -> Failed to find or create stream context (Cbd = %p, FileObject = %p)\n",
158 FltObjects->FileObject) );
160 goto CtxPostCreateCleanup;
163 DebugTrace( DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
164 (
"[Ctx]: CtxPostCreate -> Getting/Creating stream context for file %wZ (Cbd = %p, FileObject = %p, StreamContext = %p. StreamContextCreated = %x)\n",
167 FltObjects->FileObject,
169 streamContextCreated) );
175 CtxAcquireResourceExclusive(streamContext->
Resource);
191 DebugTrace( DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
192 (
"[Ctx]: CtxPostCreate -> Stream context info for file %wZ (Cbd = %p, FileObject = %p, StreamContext = %p) \n\tName = %wZ \n\tCreateCount = %x \n\tCleanupCount = %x, \n\tCloseCount = %x\n",
195 FltObjects->FileObject,
206 CtxReleaseResource(streamContext->
Resource);
213 if (!NT_SUCCESS( status )) {
215 DebugTrace( DEBUG_TRACE_ERROR | DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
216 (
"[Ctx]: CtxPostCreate -> Failed to update name in stream context for file %wZ (Cbd = %p, FileObject = %p)\n",
219 FltObjects->FileObject) );
221 goto CtxPostCreateCleanup;
232 &streamHandleContext,
233 &streamHandleContextReplaced);
234 if (!NT_SUCCESS( status )) {
242 DebugTrace( DEBUG_TRACE_ERROR | DEBUG_TRACE_STREAMHANDLE_CONTEXT_OPERATIONS,
243 (
"[Ctx]: CtxPostCreate -> Failed to find or create stream handle context (Cbd = %p, FileObject = %p)\n",
245 FltObjects->FileObject) );
247 goto CtxPostCreateCleanup;
250 DebugTrace( DEBUG_TRACE_STREAMHANDLE_CONTEXT_OPERATIONS,
251 (
"[Ctx]: CtxPostCreate -> Creating/Replacing stream handle context for file %wZ (Cbd = %p, FileObject = %p StreamHandleContext = %p, StreamHandleContextReplaced = %x)\n",
254 FltObjects->FileObject,
256 streamHandleContextReplaced) );
262 CtxAcquireResourceExclusive( streamHandleContext->
Resource );
269 streamHandleContext);
271 DebugTrace( DEBUG_TRACE_STREAMHANDLE_CONTEXT_OPERATIONS,
272 (
"[Ctx]: CtxPostCreate -> Stream handle context info for file %wZ (Cbd = %p, FileObject = %p, StreamHandleContext = %p) \n\tName = %wZ\n",
275 FltObjects->FileObject,
283 CtxReleaseResource(streamHandleContext->
Resource);
290 if (!NT_SUCCESS( status )) {
292 DebugTrace( DEBUG_TRACE_ERROR | DEBUG_TRACE_STREAMHANDLE_CONTEXT_OPERATIONS,
293 (
"[Ctx]: CtxPostCreate -> Failed to update name in stream handle context for file %wZ (Cbd = %p, FileObject = %p)\n",
296 FltObjects->FileObject) );
298 goto CtxPostCreateCleanup;
307 fileName.Buffer = nameInfo->Name.Buffer;
308 fileName.Length = nameInfo->Name.Length - nameInfo->Stream.Length;
309 fileName.MaximumLength = fileName.Length;
319 &fileContextCreated);
320 if (!NT_SUCCESS( status )) {
328 DebugTrace( DEBUG_TRACE_ERROR | DEBUG_TRACE_FILE_CONTEXT_OPERATIONS,
329 (
"[Ctx]: CtxPostCreate -> Failed to find or create file context (Cbd = %p, FileObject = %p)\n",
331 FltObjects->FileObject) );
333 goto CtxPostCreateCleanup;
336 DebugTrace( DEBUG_TRACE_FILE_CONTEXT_OPERATIONS,
337 (
"[Ctx]: CtxPostCreate -> Getting/Creating file context for file %wZ (Cbd = %p, FileObject = %p, FileContext = %p. FileContextCreated = %x)\n",
340 FltObjects->FileObject,
342 fileContextCreated) );
345 DebugTrace( DEBUG_TRACE_FILE_CONTEXT_OPERATIONS,
346 (
"[Ctx]: CtxPostCreate -> File context info for file %wZ (Cbd = %p, FileObject = %p, FileContext = %p) \n\tName = %wZ\n",
349 FltObjects->FileObject,
354 CtxPostCreateCleanup:
361 if (nameInfo !=
NULL) {
363 FltReleaseFileNameInformation( nameInfo );
366 if (fileContext !=
NULL) {
368 FltReleaseContext( fileContext );
371 if (streamContext !=
NULL) {
373 FltReleaseContext( streamContext );
376 if (streamHandleContext !=
NULL) {
378 FltReleaseContext( streamHandleContext );
381 if (!NT_SUCCESS( status )) {
384 (
"[Ctx]: CtxPostCreate -> Failed with status 0x%x \n",
396 (
"[Ctx]: CtxPostCreate -> Exit (Cbd = %p, FileObject = %p, Status = 0x%x)\n",
398 FltObjects->FileObject,
399 Cbd->IoStatus.Status) );
401 return FLT_POSTOP_FINISHED_PROCESSING;
405 FLT_PREOP_CALLBACK_STATUS
407 _Inout_ PFLT_CALLBACK_DATA Cbd,
408 _In_ PCFLT_RELATED_OBJECTS FltObjects,
409 _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
415 BOOLEAN streamContextCreated;
423 (
"[Ctx]: CtxPreCleanup -> Enter (Cbd = %p, FileObject = %p)\n",
425 FltObjects->FileObject) );
434 &streamContextCreated);
435 if (!NT_SUCCESS( status )) {
443 DebugTrace( DEBUG_TRACE_ERROR | DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
444 (
"[Ctx]: CtxPreCleanup -> Failed to find stream context (Cbd = %p, FileObject = %p)\n",
446 FltObjects->FileObject) );
448 goto CtxPreCleanupCleanup;
451 DebugTrace( DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
452 (
"[Ctx]: CtxPreCleanup -> Getting stream context for file (Cbd = %p, FileObject = %p, StreamContext = %p. StreamContextCreated = %x)\n",
454 FltObjects->FileObject,
456 streamContextCreated) );
462 CtxAcquireResourceExclusive(streamContext->
Resource);
465 DebugTrace( DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
466 (
"[Ctx]: CtxPreCleanup -> Old info in stream context for file(Cbd = %p, FileObject = %p, StreamContext = %p) \n\tName = %wZ \n\tCreateCount = %x \n\tCleanupCount = %x, \n\tCloseCount = %x\n",
468 FltObjects->FileObject,
484 DebugTrace( DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
485 (
"[Ctx]: CtxPreCleanup -> New info in stream context for file (Cbd = %p, FileObject = %p, StreamContext = %p) \n\tName = %wZ \n\tCreateCount = %x \n\tCleanupCount = %x, \n\tCloseCount = %x\n",
487 FltObjects->FileObject,
498 CtxReleaseResource(streamContext->
Resource);
501 CtxPreCleanupCleanup:
507 if (streamContext !=
NULL) {
509 FltReleaseContext( streamContext );
513 (
"[Ctx]: CtxPreCleanup -> Exit (Cbd = %p, FileObject = %p)\n",
515 FltObjects->FileObject) );
522 return FLT_PREOP_SUCCESS_NO_CALLBACK;
529 FLT_PREOP_CALLBACK_STATUS
531 _Inout_ PFLT_CALLBACK_DATA Cbd,
532 _In_ PCFLT_RELATED_OBJECTS FltObjects,
533 _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
539 BOOLEAN streamContextCreated;
547 (
"[Ctx]: CtxPreClose -> Enter (Cbd = %p, FileObject = %p)\n",
549 FltObjects->FileObject) );
558 &streamContextCreated);
559 if (!NT_SUCCESS( status )) {
567 DebugTrace( DEBUG_TRACE_ERROR | DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
568 (
"[Ctx]: CtxPreClose -> Failed to find stream context (Cbd = %p, FileObject = %p)\n",
570 FltObjects->FileObject) );
572 goto CtxPreCloseCleanup;
575 DebugTrace( DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
576 (
"[Ctx]: CtxPreClose -> Getting stream context for file (Cbd = %p, FileObject = %p, StreamContext = %p. StreamContextCreated = %x)\n",
578 FltObjects->FileObject,
580 streamContextCreated) );
586 CtxAcquireResourceExclusive(streamContext->
Resource);
589 DebugTrace( DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
590 (
"[Ctx]: CtxPreClose -> Old info in stream context for file(Cbd = %p, FileObject = %p, StreamContext = %p) \n\tName = %wZ \n\tCreateCount = %x \n\tCleanupCount = %x, \n\tCloseCount = %x\n",
592 FltObjects->FileObject,
606 DebugTrace( DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
607 (
"[Ctx]: CtxPreClose -> New info in stream context for file (Cbd = %p, FileObject = %p, StreamContext = %p) \n\tName = %wZ \n\tCreateCount = %x \n\tCleanupCount = %x, \n\tCloseCount = %x\n",
609 FltObjects->FileObject,
620 CtxReleaseResource(streamContext->
Resource);
629 if (streamContext !=
NULL) {
631 FltReleaseContext( streamContext );
636 (
"[Ctx]: CtxPreClose -> Exit (Cbd = %p, FileObject = %p)\n",
638 FltObjects->FileObject) );
645 return FLT_PREOP_SUCCESS_NO_CALLBACK;
649 FLT_PREOP_CALLBACK_STATUS
651 _Inout_ PFLT_CALLBACK_DATA Cbd,
652 _In_ PCFLT_RELATED_OBJECTS FltObjects,
653 _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
656 FILE_INFORMATION_CLASS fileInformationClass;
657 FLT_PREOP_CALLBACK_STATUS callbackStatus;
665 (
"[Ctx]: CtxPreSetInfo -> Enter (Cbd = %p, FileObject = %p)\n",
667 FltObjects->FileObject) );
669 callbackStatus = FLT_PREOP_SUCCESS_NO_CALLBACK;
671 fileInformationClass = Cbd->Iopb->Parameters.SetFileInformation.FileInformationClass;
677 if ((fileInformationClass != FileRenameInformation) &&
678 (fileInformationClass != FileRenameInformationEx)) {
681 (
"[Ctx]: CtxPreSetInfo -> Ignoring SetInfo operations other than FileRenameInformation/FileRenameInformationEx (Cbd = %p, FileObject = %p)\n",
683 FltObjects->FileObject) );
685 goto CtxPreSetInfoCleanup;
692 callbackStatus = FLT_PREOP_SYNCHRONIZE;
695 CtxPreSetInfoCleanup:
699 (
"[Ctx]: CtxPreSetInfo -> Exit (Cbd = %p, FileObject = %p)\n",
701 FltObjects->FileObject) );
703 return callbackStatus;
710 FLT_POSTOP_CALLBACK_STATUS
712 _Inout_ PFLT_CALLBACK_DATA Cbd,
713 _In_ PCFLT_RELATED_OBJECTS FltObjects,
714 _Inout_opt_ PVOID CbdContext,
715 _In_ FLT_POST_OPERATION_FLAGS Flags
722 PFLT_FILE_NAME_INFORMATION nameInfo =
NULL;
725 BOOLEAN streamContextCreated, fileContextCreated, streamHandleContextReplaced;
742 (
"[Ctx]: CtxPostSetInfo -> Enter (Cbd = %p, FileObject = %p)\n",
744 FltObjects->FileObject) );
751 status = STATUS_SUCCESS;
757 if (!NT_SUCCESS( Cbd->IoStatus.Status )) {
759 goto CtxPostSetInfoCleanup;
767 DebugTrace( DEBUG_TRACE_INSTANCE_CONTEXT_OPERATIONS,
768 (
"[Ctx]: CtxPostSetInfo -> Trying to get instance context (TargetInstance = %p, Cbd = %p, FileObject = %p)\n",
769 Cbd->Iopb->TargetInstance,
771 FltObjects->FileObject) );
773 status = FltGetInstanceContext( Cbd->Iopb->TargetInstance,
775 if (!NT_SUCCESS( status )) {
777 DebugTrace( DEBUG_TRACE_INSTANCE_CONTEXT_OPERATIONS | DEBUG_TRACE_ERROR,
778 (
"[Ctx]: CtxPostSetInfo -> Failed to get instance context (Cbd = %p, FileObject = %p)\n",
780 FltObjects->FileObject) );
782 goto CtxPostSetInfoCleanup;
785 DebugTrace( DEBUG_TRACE_INSTANCE_CONTEXT_OPERATIONS,
786 (
"[Ctx]: CtxPostSetInfo -> Instance context info for volume %wZ (Cbd = %p, FileObject = %p, InstanceContext = %p) \n\tVolumeName = %wZ \n\tInstance = %p \n\tVolume = %p\n",
789 FltObjects->FileObject,
793 &instanceContext->
Volume) );
800 status = FltGetFileNameInformation( Cbd,
801 FLT_FILE_NAME_NORMALIZED |
802 FLT_FILE_NAME_QUERY_DEFAULT,
805 if (!NT_SUCCESS( status )) {
807 DebugTrace( DEBUG_TRACE_ERROR | DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS | DEBUG_TRACE_STREAMHANDLE_CONTEXT_OPERATIONS,
808 (
"[Ctx]: CtxPostSetInfo -> Failed to get file name information (Cbd = %p, FileObject = %p)\n",
810 FltObjects->FileObject) );
812 goto CtxPostSetInfoCleanup;
823 &streamContextCreated);
824 if (!NT_SUCCESS( status )) {
832 DebugTrace( DEBUG_TRACE_ERROR | DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
833 (
"[Ctx]: CtxPostSetInfo -> Failed to find stream context (Cbd = %p, FileObject = %p)\n",
835 FltObjects->FileObject) );
837 goto CtxPostSetInfoCleanup;
840 DebugTrace( DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
841 (
"[Ctx]: CtxPostSetInfo -> Getting stream context for file %wZ (Cbd = %p, FileObject = %p, StreamContext = %p. StreamContextCreated = %x)\n",
844 FltObjects->FileObject,
846 streamContextCreated) );
852 CtxAcquireResourceExclusive(streamContext->
Resource);
855 DebugTrace( DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
856 (
"[Ctx]: CtxPostSetInfo -> Old info in stream context for file %wZ (Cbd = %p, FileObject = %p, StreamContext = %p) \n\tName = %wZ \n\tCreateCount = %x \n\tCleanupCount = %x, \n\tCloseCount = %x\n",
859 FltObjects->FileObject,
876 DebugTrace( DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
877 (
"[Ctx]: CtxPostSetInfo -> New info in stream context for file %wZ (Cbd = %p, FileObject = %p, StreamContext = %p) \n\tName = %wZ \n\tCreateCount = %x \n\tCleanupCount = %x, \n\tCloseCount = %x\n",
880 FltObjects->FileObject,
891 CtxReleaseResource(streamContext->
Resource);
898 if (!NT_SUCCESS( status )) {
900 DebugTrace( DEBUG_TRACE_ERROR | DEBUG_TRACE_STREAM_CONTEXT_OPERATIONS,
901 (
"[Ctx]: CtxPostSetInfo -> Failed to update name in stream context for file %wZ (Cbd = %p, FileObject = %p)\n",
904 FltObjects->FileObject) );
906 goto CtxPostSetInfoCleanup;
917 &streamHandleContext,
918 &streamHandleContextReplaced);
919 if (!NT_SUCCESS( status )) {
927 DebugTrace( DEBUG_TRACE_ERROR | DEBUG_TRACE_STREAMHANDLE_CONTEXT_OPERATIONS,
928 (
"[Ctx]: CtxPostSetInfo -> Failed to find or create stream handle context (Cbd = %p, FileObject = %p)\n",
930 FltObjects->FileObject) );
932 goto CtxPostSetInfoCleanup;
935 DebugTrace( DEBUG_TRACE_STREAMHANDLE_CONTEXT_OPERATIONS,
936 (
"[Ctx]: CtxPostSetInfo -> Creating/Replacing stream handle context for file %wZ (Cbd = %p, FileObject = %p StreamHandleContext = %p, StreamHandleContextReplaced = %x)\n",
939 FltObjects->FileObject,
941 streamHandleContextReplaced) );
947 CtxAcquireResourceExclusive(streamHandleContext->
Resource);
954 streamHandleContext);
956 DebugTrace( DEBUG_TRACE_STREAMHANDLE_CONTEXT_OPERATIONS,
957 (
"[Ctx]: CtxPostSetInfo -> Stream handle context info for file %wZ (Cbd = %p, FileObject = %p, StreamHandleContext = %p) \n\tName = %wZ\n",
960 FltObjects->FileObject,
968 CtxReleaseResource( streamHandleContext->
Resource );
975 if (!NT_SUCCESS( status )) {
977 DebugTrace( DEBUG_TRACE_ERROR | DEBUG_TRACE_STREAMHANDLE_CONTEXT_OPERATIONS,
978 (
"[Ctx]: CtxPostSetInfo -> Failed to update name in stream handle context for file %wZ (Cbd = %p, FileObject = %p)\n",
981 FltObjects->FileObject) );
983 goto CtxPostSetInfoCleanup;
995 &fileContextCreated);
996 if (!NT_SUCCESS( status )) {
1004 DebugTrace( DEBUG_TRACE_ERROR | DEBUG_TRACE_FILE_CONTEXT_OPERATIONS,
1005 (
"[Ctx]: CtxPostSetInfo -> Failed to find file context (Cbd = %p, FileObject = %p)\n",
1007 FltObjects->FileObject) );
1009 goto CtxPostSetInfoCleanup;
1012 DebugTrace( DEBUG_TRACE_FILE_CONTEXT_OPERATIONS,
1013 (
"[Ctx]: CtxPostSetInfo -> Getting file context for file %wZ (Cbd = %p, FileObject = %p, FileContext = %p. FileContextCreated = %x)\n",
1016 FltObjects->FileObject,
1018 fileContextCreated) );
1020 DebugTrace( DEBUG_TRACE_FILE_CONTEXT_OPERATIONS,
1021 (
"[Ctx]: CtxPostSetInfo -> File context info for file %wZ (Cbd = %p, FileObject = %p, FileContext = %p) \n\tName = %wZ\n",
1024 FltObjects->FileObject,
1029 CtxPostSetInfoCleanup:
1036 if (instanceContext !=
NULL) {
1038 FltReleaseContext( instanceContext );
1041 if (fileContext !=
NULL) {
1043 FltReleaseContext( fileContext );
1046 if (streamContext !=
NULL) {
1048 FltReleaseContext( streamContext );
1051 if (streamHandleContext !=
NULL) {
1053 FltReleaseContext( streamHandleContext );
1056 if (nameInfo !=
NULL) {
1058 FltReleaseFileNameInformation( nameInfo );
1061 if (!NT_SUCCESS( status )) {
1064 (
"[Ctx]: CtxPostSetInfo -> Failed with status 0x%x \n",
1074 (
"[Ctx]: CtxPostSetInfo -> Exit (Cbd = %p, FileObject = %p)\n",
1076 FltObjects->FileObject) );
1078 return FLT_POSTOP_FINISHED_PROCESSING;
NTSTATUS CtxFindOrCreateFileContext(_In_ PFLT_CALLBACK_DATA Cbd, _In_ BOOLEAN CreateIfNotFound, _When_(CreateIfNotFound !=FALSE, _In_) _When_(CreateIfNotFound==FALSE, _In_opt_) PUNICODE_STRING FileName, _Outptr_ PCTX_FILE_CONTEXT *FileContext, _Out_opt_ PBOOLEAN ContextCreated)
FLT_PREOP_CALLBACK_STATUS CtxPreCreate(_Inout_ PFLT_CALLBACK_DATA Cbd, _In_ PCFLT_RELATED_OBJECTS FltObjects, _Flt_CompletionContext_Outptr_ PVOID *CompletionContext)
FLT_PREOP_CALLBACK_STATUS CtxPreCleanup(_Inout_ PFLT_CALLBACK_DATA Cbd, _In_ PCFLT_RELATED_OBJECTS FltObjects, _Flt_CompletionContext_Outptr_ PVOID *CompletionContext)
FLT_POSTOP_CALLBACK_STATUS CtxPostSetInfo(_Inout_ PFLT_CALLBACK_DATA Cbd, _In_ PCFLT_RELATED_OBJECTS FltObjects, _Inout_opt_ PVOID CbdContext, _In_ FLT_POST_OPERATION_FLAGS Flags)
#define DebugTrace(Level, Data)
FLT_PREOP_CALLBACK_STATUS CtxPreClose(_Inout_ PFLT_CALLBACK_DATA Cbd, _In_ PCFLT_RELATED_OBJECTS FltObjects, _Flt_CompletionContext_Outptr_ PVOID *CompletionContext)
UNREFERENCED_PARAMETER(FileObject)
NTSTATUS CtxUpdateNameInStreamHandleContext(_In_ PUNICODE_STRING DirectoryName, _Inout_ PCTX_STREAMHANDLE_CONTEXT StreamHandleContext)
NcLoadRegistryStringRetry NULL
NTSTATUS CtxFindOrCreateStreamContext(_In_ PFLT_CALLBACK_DATA Cbd, _In_ BOOLEAN CreateIfNotFound, _Outptr_ PCTX_STREAM_CONTEXT *StreamContext, _Out_opt_ PBOOLEAN ContextCreated)
UNICODE_STRING VolumeName
FLT_PREOP_CALLBACK_STATUS CtxPreSetInfo(_Inout_ PFLT_CALLBACK_DATA Cbd, _In_ PCFLT_RELATED_OBJECTS FltObjects, _Flt_CompletionContext_Outptr_ PVOID *CompletionContext)
NTSTATUS CtxCreateOrReplaceStreamHandleContext(_In_ PFLT_CALLBACK_DATA Cbd, _In_ BOOLEAN ReplaceIfExists, _Outptr_ PCTX_STREAMHANDLE_CONTEXT *StreamHandleContext, _Out_opt_ PBOOLEAN ContextReplaced)
NTSTATUS CtxUpdateNameInStreamContext(_In_ PUNICODE_STRING DirectoryName, _Inout_ PCTX_STREAM_CONTEXT StreamContext)
FLT_POSTOP_CALLBACK_STATUS CtxPostCreate(_Inout_ PFLT_CALLBACK_DATA Cbd, _In_ PCFLT_RELATED_OBJECTS FltObjects, _Inout_opt_ PVOID CbdContext, _In_ FLT_POST_OPERATION_FLAGS Flags)