WDK Mini Filter Example
MetadataManagerProc.h
Go to the documentation of this file.
1 /*++
2 
3 Copyright (c) 1999 - 2002 Microsoft Corporation
4 
5 Module Name:
6 
7  MetadataManagerProc.h
8 
9 Abstract:
10 
11  This is the header file defining the functions of the kernel mode
12  filter driver implementing filter metadata management.
13 
14 
15 Environment:
16 
17  Kernel mode
18 
19 
20 --*/
21 
22 #define MAKE_RESOURCE_OWNER(X) (((ERESOURCE_THREAD)(X)) | 0x3)
23 
24 //
25 // Functions implemented in operations.c
26 //
27 
28 FLT_PREOP_CALLBACK_STATUS
30  _Inout_ PFLT_CALLBACK_DATA Cbd,
31  _In_ PCFLT_RELATED_OBJECTS FltObjects,
32  _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
33  );
34 
35 FLT_POSTOP_CALLBACK_STATUS
37  _Inout_ PFLT_CALLBACK_DATA Cbd,
38  _In_ PCFLT_RELATED_OBJECTS FltObjects,
39  _In_ PVOID CbdContext,
40  _In_ FLT_POST_OPERATION_FLAGS Flags
41  );
42 
43 FLT_PREOP_CALLBACK_STATUS
45  _Inout_ PFLT_CALLBACK_DATA Cbd,
46  _In_ PCFLT_RELATED_OBJECTS FltObjects,
47  _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
48  );
49 
50 FLT_POSTOP_CALLBACK_STATUS
52  _Inout_ PFLT_CALLBACK_DATA Cbd,
53  _In_ PCFLT_RELATED_OBJECTS FltObjects,
54  _Inout_ PVOID CompletionContext,
55  _In_ FLT_POST_OPERATION_FLAGS Flags
56  );
57 
58 
59 FLT_PREOP_CALLBACK_STATUS
61  _Inout_ PFLT_CALLBACK_DATA Cbd,
62  _In_ PCFLT_RELATED_OBJECTS FltObjects,
63  _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
64  );
65 
66 FLT_POSTOP_CALLBACK_STATUS
68  _Inout_ PFLT_CALLBACK_DATA Cbd,
69  _In_ PCFLT_RELATED_OBJECTS FltObjects,
70  _In_ PVOID CompletionContext,
71  _In_ FLT_POST_OPERATION_FLAGS Flags
72  );
73 
74 FLT_PREOP_CALLBACK_STATUS
76  _Inout_ PFLT_CALLBACK_DATA Cbd,
77  _In_ PCFLT_RELATED_OBJECTS FltObjects,
78  _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
79  );
80 
81 FLT_POSTOP_CALLBACK_STATUS
83  _Inout_ PFLT_CALLBACK_DATA Cbd,
84  _In_ PCFLT_RELATED_OBJECTS FltObjects,
85  _In_ PVOID CbdContext,
86  _In_ FLT_POST_OPERATION_FLAGS Flags
87  );
88 
89 FLT_PREOP_CALLBACK_STATUS
91  _Inout_ PFLT_CALLBACK_DATA Cbd,
92  _In_ PCFLT_RELATED_OBJECTS FltObjects,
93  _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
94  );
95 
96 FLT_PREOP_CALLBACK_STATUS
97 FmmPrePnp (
98  _Inout_ PFLT_CALLBACK_DATA Cbd,
99  _In_ PCFLT_RELATED_OBJECTS FltObjects,
100  _Flt_CompletionContext_Outptr_ PVOID *CompletionContext
101  );
102 
103 FLT_POSTOP_CALLBACK_STATUS
104 FmmPostPnp (
105  _Inout_ PFLT_CALLBACK_DATA Cbd,
106  _In_ PCFLT_RELATED_OBJECTS FltObjects,
107  _In_ PVOID CbdContext,
108  _In_ FLT_POST_OPERATION_FLAGS Flags
109  );
110 
111 //
112 // Functions implemented in datastore.c
113 //
114 
115 _Requires_lock_held_(_Global_critical_region_)
116 _Requires_lock_held_(InstanceContext->MetadataResource)
117 _IRQL_requires_max_(PASSIVE_LEVEL)
118 NTSTATUS
119 FmmOpenMetadata (
120  _In_ PFMM_INSTANCE_CONTEXT InstanceContext,
121  _In_ BOOLEAN CreateIfNotPresent
122  );
123 
124 _Requires_lock_held_(_Global_critical_region_)
125 _Requires_lock_held_(InstanceContext->MetadataResource)
126 _IRQL_requires_max_(PASSIVE_LEVEL)
127 VOID
128 FmmCloseMetadata (
129  _In_ PFMM_INSTANCE_CONTEXT InstanceContext
130  );
131 
132 NTSTATUS
134  _Inout_ PFLT_CALLBACK_DATA Cbd
135  );
136 
137 NTSTATUS
139  _Inout_ PFLT_CALLBACK_DATA Cbd
140  );
141 
142 NTSTATUS
144  _Inout_ PFLT_CALLBACK_DATA Cbd
145  );
146 
147 _Releases_lock_(_Global_critical_region_)
148 _Requires_lock_held_(InstanceContext->MetadataResource)
149 _Releases_lock_(InstanceContext->MetadataResource)
150 _IRQL_requires_max_(APC_LEVEL)
151 VOID
152 FmmBeginFileSystemOperation (
153  IN PFMM_INSTANCE_CONTEXT InstanceContext
154  );
155 
156 _Acquires_lock_(_Global_critical_region_)
157 _Requires_lock_not_held_(InstanceContext->MetadataResource)
158 _Acquires_exclusive_lock_(InstanceContext->MetadataResource)
159 _IRQL_requires_max_(APC_LEVEL)
160 VOID
161 FmmEndFileSystemOperation (
162  IN PFMM_INSTANCE_CONTEXT InstanceContext
163  );
164 
165 
166 #if VERIFY_METADATA_OPENED
167 
168 NTSTATUS
169 FmmIsMetadataOpen (
170  _Inout_ PFLT_CALLBACK_DATA Cbd,
171  _Out_ BOOLEAN* MetadataOpen
172  );
173 
174 #endif
175 
176 //
177 // Functions implemented in support.c
178 //
179 
180 NTSTATUS
182  _Inout_ PUNICODE_STRING String
183  );
184 
185 VOID
187  _Inout_ PUNICODE_STRING String
188  );
189 
190 BOOLEAN
192  _In_ PFLT_CALLBACK_DATA Cbd
193  );
194 
195 NTSTATUS
197  _In_ PFLT_CALLBACK_DATA Cbd,
198  _Out_ PBOOLEAN IsLock
199  );
200 
201 //
202 // Lock primitives
203 //
204 
205 _Acquires_lock_(_Global_critical_region_)
206 _IRQL_requires_max_(APC_LEVEL)
207 FORCEINLINE
208 VOID
209 FmmAcquireResourceExclusive (
210  _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_exclusive_lock_(*_Curr_)
211  PERESOURCE Resource
212  )
213 {
214  FLT_ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
215  FLT_ASSERT(ExIsResourceAcquiredExclusiveLite(Resource) ||
216  !ExIsResourceAcquiredSharedLite(Resource));
217 
218  KeEnterCriticalRegion();
219  (VOID)ExAcquireResourceExclusiveLite( Resource, TRUE );
220 }
221 
222 _Acquires_lock_(_Global_critical_region_)
223 _IRQL_requires_max_(APC_LEVEL)
224 FORCEINLINE
225 VOID
226 FmmAcquireResourceShared (
227  _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_shared_lock_(*_Curr_)
228  PERESOURCE Resource
229  )
230 {
231  FLT_ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
232 
233  KeEnterCriticalRegion();
234  (VOID)ExAcquireResourceSharedLite( Resource, TRUE );
235 }
236 
237 _Releases_lock_(_Global_critical_region_)
238 _IRQL_requires_max_(APC_LEVEL)
239 FORCEINLINE
240 VOID
241 FmmReleaseResource (
242  _Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_)
243  PERESOURCE Resource
244  )
245 {
246  FLT_ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL);
247  FLT_ASSERT(ExIsResourceAcquiredExclusiveLite(Resource) ||
248  ExIsResourceAcquiredSharedLite(Resource));
249 
250  ExReleaseResourceLite(Resource);
251  KeLeaveCriticalRegion();
252 }
253 
254 
255 
NTSTATUS FmmAllocateUnicodeString(_Inout_ PUNICODE_STRING String)
FLT_POSTOP_CALLBACK_STATUS FmmPostCleanup(_Inout_ PFLT_CALLBACK_DATA Cbd, _In_ PCFLT_RELATED_OBJECTS FltObjects, _Inout_ PVOID CompletionContext, _In_ FLT_POST_OPERATION_FLAGS Flags)
NTSTATUS FmmSetMetadataOpenTriggerFileObject(_Inout_ PFLT_CALLBACK_DATA Cbd)
Definition: DataStore.c:731
FLT_ASSERT(IS_MY_CONTROL_DEVICE_OBJECT(DeviceObject))
return TRUE
NTSTATUS FmmReacquireMetadataFileReferences(_Inout_ PFLT_CALLBACK_DATA Cbd)
Definition: DataStore.c:580
NTSTATUS FmmIsImplicitVolumeLock(_In_ PFLT_CALLBACK_DATA Cbd, _Out_ PBOOLEAN IsLock)
_Acquires_lock_(_Global_critical_region_) _Requires_lock_not_held_(InstanceContext -> MetadataResource) _Acquires_exclusive_lock_(InstanceContext->MetadataResource) _IRQL_requires_max_(APC_LEVEL) VOID FmmEndFileSystemOperation(IN PFMM_INSTANCE_CONTEXT InstanceContext)
_Releases_lock_(_Global_critical_region_) _Requires_lock_held_(InstanceContext -> MetadataResource) _Releases_lock_(InstanceContext->MetadataResource) _IRQL_requires_max_(APC_LEVEL) VOID FmmBeginFileSystemOperation(IN PFMM_INSTANCE_CONTEXT InstanceContext)
BOOLEAN FmmTargetIsVolumeOpen(_In_ PFLT_CALLBACK_DATA Cbd)
FLT_POSTOP_CALLBACK_STATUS FmmPostDeviceControl(_Inout_ PFLT_CALLBACK_DATA Cbd, _In_ PCFLT_RELATED_OBJECTS FltObjects, _In_ PVOID CbdContext, _In_ FLT_POST_OPERATION_FLAGS Flags)
_Requires_lock_held_(_Global_critical_region_) _Requires_lock_held_(InstanceContext -> MetadataResource) _IRQL_requires_max_(PASSIVE_LEVEL) NTSTATUS FmmOpenMetadata(_In_ PFMM_INSTANCE_CONTEXT InstanceContext, _In_ BOOLEAN CreateIfNotPresent)
Definition: DataStore.c:38
FLT_POSTOP_CALLBACK_STATUS FmmPostFSControl(_Inout_ PFLT_CALLBACK_DATA Cbd, _In_ PCFLT_RELATED_OBJECTS FltObjects, _In_ PVOID CompletionContext, _In_ FLT_POST_OPERATION_FLAGS Flags)
FLT_PREOP_CALLBACK_STATUS FmmPrePnp(_Inout_ PFLT_CALLBACK_DATA Cbd, _In_ PCFLT_RELATED_OBJECTS FltObjects, _Flt_CompletionContext_Outptr_ PVOID *CompletionContext)
FLT_PREOP_CALLBACK_STATUS FmmPreFSControl(_Inout_ PFLT_CALLBACK_DATA Cbd, _In_ PCFLT_RELATED_OBJECTS FltObjects, _Flt_CompletionContext_Outptr_ PVOID *CompletionContext)
FLT_POSTOP_CALLBACK_STATUS FmmPostPnp(_Inout_ PFLT_CALLBACK_DATA Cbd, _In_ PCFLT_RELATED_OBJECTS FltObjects, _In_ PVOID CbdContext, _In_ FLT_POST_OPERATION_FLAGS Flags)
FLT_PREOP_CALLBACK_STATUS FmmPreCreate(_Inout_ PFLT_CALLBACK_DATA Cbd, _In_ PCFLT_RELATED_OBJECTS FltObjects, _Flt_CompletionContext_Outptr_ PVOID *CompletionContext)
FLT_POSTOP_CALLBACK_STATUS FmmPostCreate(_Inout_ PFLT_CALLBACK_DATA Cbd, _In_ PCFLT_RELATED_OBJECTS FltObjects, _In_ PVOID CbdContext, _In_ FLT_POST_OPERATION_FLAGS Flags)
NTSTATUS FmmReleaseMetadataFileReferences(_Inout_ PFLT_CALLBACK_DATA Cbd)
Definition: DataStore.c:449
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
FLT_PREOP_CALLBACK_STATUS FmmPreDeviceControl(_Inout_ PFLT_CALLBACK_DATA Cbd, _In_ PCFLT_RELATED_OBJECTS FltObjects, _Flt_CompletionContext_Outptr_ PVOID *CompletionContext)
VOID FmmFreeUnicodeString(_Inout_ PUNICODE_STRING String)
FLT_PREOP_CALLBACK_STATUS FmmPreCleanup(_Inout_ PFLT_CALLBACK_DATA Cbd, _In_ PCFLT_RELATED_OBJECTS FltObjects, _Flt_CompletionContext_Outptr_ PVOID *CompletionContext)
FLT_PREOP_CALLBACK_STATUS FmmPreShutdown(_Inout_ PFLT_CALLBACK_DATA Cbd, _In_ PCFLT_RELATED_OBJECTS FltObjects, _Flt_CompletionContext_Outptr_ PVOID *CompletionContext)

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