WDK Mini Filter Example
CtxProc.h
Go to the documentation of this file.
1 /*++
2 
3 Copyright (c) 1999 - 2002 Microsoft Corporation
4 
5 Module Name:
6 
7  CtxProc.h
8 
9 Abstract:
10 
11  This is the header file defining the functions of the kernel mode
12  filter driver implementing the context sample.
13 
14 
15 Environment:
16 
17  Kernel mode
18 
19 
20 --*/
21 
22 
23 //
24 // Functions implemented in operations.c
25 //
26 
27 FLT_PREOP_CALLBACK_STATUS
29  _Inout_ PFLT_CALLBACK_DATA Cbd,
30  _In_ PCFLT_RELATED_OBJECTS FltObjects,
31  _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
32  );
33 
34 FLT_POSTOP_CALLBACK_STATUS
36  _Inout_ PFLT_CALLBACK_DATA Cbd,
37  _In_ PCFLT_RELATED_OBJECTS FltObjects,
38  _Inout_opt_ PVOID CbdContext,
39  _In_ FLT_POST_OPERATION_FLAGS Flags
40  );
41 
42 FLT_PREOP_CALLBACK_STATUS
44  _Inout_ PFLT_CALLBACK_DATA Cbd,
45  _In_ PCFLT_RELATED_OBJECTS FltObjects,
46  _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
47  );
48 
49 FLT_PREOP_CALLBACK_STATUS
51  _Inout_ PFLT_CALLBACK_DATA Cbd,
52  _In_ PCFLT_RELATED_OBJECTS FltObjects,
53  _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
54  );
55 
56 
57 FLT_PREOP_CALLBACK_STATUS
59  _Inout_ PFLT_CALLBACK_DATA Cbd,
60  _In_ PCFLT_RELATED_OBJECTS FltObjects,
61  _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
62  );
63 
64 FLT_POSTOP_CALLBACK_STATUS
66  _Inout_ PFLT_CALLBACK_DATA Cbd,
67  _In_ PCFLT_RELATED_OBJECTS FltObjects,
68  _Inout_opt_ PVOID CbdContext,
69  _In_ FLT_POST_OPERATION_FLAGS Flags
70  );
71 
72 
73 //
74 // Functions implemented in context.c
75 //
76 
77 NTSTATUS
79  _In_ PFLT_CALLBACK_DATA Cbd,
80  _In_ BOOLEAN CreateIfNotFound,
81  _When_( CreateIfNotFound != FALSE, _In_ ) _When_( CreateIfNotFound == FALSE, _In_opt_ ) PUNICODE_STRING FileName,
82  _Outptr_ PCTX_FILE_CONTEXT *StreamContext,
83  _Out_opt_ PBOOLEAN ContextCreated
84  );
85 
86 NTSTATUS
88  _In_ PUNICODE_STRING FileName,
89  _Outptr_ PCTX_FILE_CONTEXT *StreamContext
90  );
91 
92 
93 NTSTATUS
95  _In_ PFLT_CALLBACK_DATA Cbd,
96  _In_ BOOLEAN CreateIfNotFound,
97  _Outptr_ PCTX_STREAM_CONTEXT *StreamContext,
98  _Out_opt_ PBOOLEAN ContextCreated
99  );
100 
101 NTSTATUS
103  _Outptr_ PCTX_STREAM_CONTEXT *StreamContext
104  );
105 
106 NTSTATUS
108  _In_ PUNICODE_STRING DirectoryName,
109  _Inout_ PCTX_STREAM_CONTEXT StreamContext
110  );
111 
112 NTSTATUS
114  _In_ PFLT_CALLBACK_DATA Cbd,
115  _In_ BOOLEAN ReplaceIfExists,
116  _Outptr_ PCTX_STREAMHANDLE_CONTEXT *StreamHandleContext,
117  _Out_opt_ PBOOLEAN ContextReplaced
118  );
119 
120 NTSTATUS
122  _Outptr_ PCTX_STREAMHANDLE_CONTEXT *StreamHandleContext
123  );
124 
125 NTSTATUS
127  _In_ PUNICODE_STRING DirectoryName,
128  _Inout_ PCTX_STREAMHANDLE_CONTEXT StreamHandleContext
129  );
130 
131 
132 //
133 // Functions implemented in support.c
134 //
135 
136 _At_(String->Length, _Out_range_(==, 0))
137 _At_(String->MaximumLength, _In_)
138 _At_(String->Buffer, _Pre_maybenull_ _Post_notnull_ _Post_writable_byte_size_(String->MaximumLength))
139 NTSTATUS
140 CtxAllocateUnicodeString (
141  _Out_ PUNICODE_STRING String
142  );
143 
144 _At_(String->Length, _Out_range_(==, 0))
145 _At_(String->MaximumLength, _Out_range_(==, 0))
146 _At_(String->Buffer, _Pre_notnull_ _Post_null_)
147 VOID
148 CtxFreeUnicodeString (
149  _Pre_notnull_ PUNICODE_STRING String
150  );
151 
152 
153 //
154 // Resource support
155 //
156 
157 FORCEINLINE
158 PERESOURCE
160  VOID
161  )
162 {
163 
164  return ExAllocatePoolWithTag( NonPagedPool,
165  sizeof( ERESOURCE ),
167 }
168 
169 FORCEINLINE
170 VOID
172  _In_ PERESOURCE Resource
173  )
174 {
175 
176  ExFreePoolWithTag( Resource,
178 }
179 
180 FORCEINLINE
181 VOID
182 _Acquires_lock_(_Global_critical_region_)
183 _IRQL_requires_max_(APC_LEVEL)
184 CtxAcquireResourceExclusive (
185  _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_exclusive_lock_(*_Curr_)
186  PERESOURCE Resource
187  )
188 {
189  FLT_ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
190  FLT_ASSERT(ExIsResourceAcquiredExclusiveLite(Resource) ||
191  !ExIsResourceAcquiredSharedLite(Resource));
192 
193  KeEnterCriticalRegion();
194  (VOID)ExAcquireResourceExclusiveLite( Resource, TRUE );
195 }
196 
197 FORCEINLINE
198 VOID
199 _Acquires_lock_(_Global_critical_region_)
200 _IRQL_requires_max_(APC_LEVEL)
201 CtxAcquireResourceShared (
202  _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_shared_lock_(*_Curr_)
203  PERESOURCE Resource
204  )
205 {
206  FLT_ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
207 
208  KeEnterCriticalRegion();
209  (VOID)ExAcquireResourceSharedLite( Resource, TRUE );
210 }
211 
212 FORCEINLINE
213 VOID
214 _Releases_lock_(_Global_critical_region_)
215 _Requires_lock_held_(_Global_critical_region_)
216 _IRQL_requires_max_(APC_LEVEL)
217 CtxReleaseResource (
218  _Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_)
219  PERESOURCE Resource
220  )
221 {
222  FLT_ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
223  FLT_ASSERT(ExIsResourceAcquiredExclusiveLite(Resource) ||
224  ExIsResourceAcquiredSharedLite(Resource));
225 
226  ExReleaseResourceLite(Resource);
227  KeLeaveCriticalRegion();
228 }
229 
230 
_In_ PLARGE_INTEGER _In_ ULONG Length
NTSTATUS CtxCreateOrReplaceStreamHandleContext(_In_ PFLT_CALLBACK_DATA Cbd, _In_ BOOLEAN ReplaceIfExists, _Outptr_ PCTX_STREAMHANDLE_CONTEXT *StreamHandleContext, _Out_opt_ PBOOLEAN ContextReplaced)
Definition: ctx/context.c:582
NTSTATUS CtxFindOrCreateStreamContext(_In_ PFLT_CALLBACK_DATA Cbd, _In_ BOOLEAN CreateIfNotFound, _Outptr_ PCTX_STREAM_CONTEXT *StreamContext, _Out_opt_ PBOOLEAN ContextCreated)
Definition: ctx/context.c:284
NTSTATUS CtxCreateStreamHandleContext(_Outptr_ PCTX_STREAMHANDLE_CONTEXT *StreamHandleContext)
Definition: ctx/context.c:764
_When_(Data==NULL, _Pre_satisfies_(FileObject !=NULL &&Instance !=NULL)) _When_(FileObject
FLT_ASSERT(IS_MY_CONTROL_DEVICE_OBJECT(DeviceObject))
return TRUE
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)
_At_(String->Length, _Out_range_(==, 0)) _At_(String -> MaximumLength, _In_) _At_(String->Buffer, _Pre_maybenull_ _Post_notnull_ _Post_writable_byte_size_(String->MaximumLength)) NTSTATUS CtxAllocateUnicodeString(_Out_ PUNICODE_STRING String)
Definition: ctx/support.c:84
_In_ BOOLEAN _Out_ PFILE_BASIC_INFORMATION Buffer
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 *StreamContext, _Out_opt_ PBOOLEAN ContextCreated)
Definition: ctx/context.c:41
NTSTATUS CtxCreateStreamContext(_Outptr_ PCTX_STREAM_CONTEXT *StreamContext)
Definition: ctx/context.c:458
FORCEINLINE PERESOURCE CtxAllocateResource(VOID)
Definition: CtxProc.h:159
FORCEINLINE VOID _Acquires_lock_(_Global_critical_region_) _IRQL_requires_max_(APC_LEVEL) CtxAcquireResourceExclusive(_Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_exclusive_lock_(*_Curr_) PERESOURCE Resource)
Definition: CtxProc.h:182
FLT_PREOP_CALLBACK_STATUS CtxPreClose(_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)
VOID _IRQL_requires_max_(VOID_IRQL_requires_max_(APC_LEVEL) _IRQL_requires_min_() _IRQL_raises_(PASSIVE_LEVEL) _Requires_lock_held_((CONTAINING_RECORD(DataQueue APC_LEVEL)
Definition: cancelSafe.c:194
_Requires_lock_held_(_Global_critical_region_)
Definition: DataStore.c:38
FLT_PREOP_CALLBACK_STATUS CtxPreSetInfo(_Inout_ PFLT_CALLBACK_DATA Cbd, _In_ PCFLT_RELATED_OBJECTS FltObjects, _Flt_CompletionContext_Outptr_ PVOID *CompletionContext)
OutputString MaximumLength
Definition: ncinit.c:155
NTSTATUS CtxCreateFileContext(_In_ PUNICODE_STRING FileName, _Outptr_ PCTX_FILE_CONTEXT *StreamContext)
Definition: ctx/context.c:215
FLT_PREOP_CALLBACK_STATUS CtxPreCreate(_Inout_ PFLT_CALLBACK_DATA Cbd, _In_ PCFLT_RELATED_OBJECTS FltObjects, _Flt_CompletionContext_Outptr_ PVOID *CompletionContext)
FORCEINLINE VOID CtxFreeResource(_In_ PERESOURCE Resource)
Definition: CtxProc.h:171
NTSTATUS CtxUpdateNameInStreamHandleContext(_In_ PUNICODE_STRING DirectoryName, _Inout_ PCTX_STREAMHANDLE_CONTEXT StreamHandleContext)
Definition: ctx/context.c:832
FORCEINLINE VOID _Releases_lock_(_Global_critical_region_) _Requires_lock_held_(_Global_critical_region_) _IRQL_requires_max_(APC_LEVEL) CtxReleaseResource(_Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) PERESOURCE Resource)
Definition: CtxProc.h:214
FLT_PREOP_CALLBACK_STATUS CtxPreCleanup(_Inout_ PFLT_CALLBACK_DATA Cbd, _In_ PCFLT_RELATED_OBJECTS FltObjects, _Flt_CompletionContext_Outptr_ PVOID *CompletionContext)
#define CTX_RESOURCE_TAG
Definition: CtxStruc.h:27
NTSTATUS CtxUpdateNameInStreamContext(_In_ PUNICODE_STRING DirectoryName, _Inout_ PCTX_STREAM_CONTEXT StreamContext)
Definition: ctx/context.c:524

Social Network


Services Overview

Architect, implement and test file system filter drivers for a wide range of functionality. We can offer several levels of assistance to meet your specific.

Contact Us

You are welcome to contact us for salse or partnership.

Sales: sales@easefilter.com
Support: support@easefilter.com
Info: info@easefilter.com