WDK Mini Filter Example
CdoProc.h
Go to the documentation of this file.
1 /*++
2 
3 Copyright (c) 1999 - 2002 Microsoft Corporation
4 
5 Module Name:
6 
7  CdoProc.h
8 
9 Abstract:
10 
11  This is the header file defining the functions of the kernel mode
12  filter driver implementing the CDO sample.
13 
14 
15 Environment:
16 
17  Kernel mode
18 
19 
20 --*/
21 
22 
23 //
24 // Functions implemented in operations.c
25 //
26 
27 
28 
29 //
30 // Functions implemented in CdoOperations.c
31 //
32 
33 _Function_class_(DRIVER_INITIALIZE)
34 NTSTATUS
35 CdoCreateControlDeviceObject(
36  _Inout_ PDRIVER_OBJECT DriverObject
37  );
38 
39 VOID
41  VOID
42  );
43 
44 //
45 // Functions implemented in CdoOperations.c
46 //
47 
48 DRIVER_DISPATCH CdoMajorFunction;
49 NTSTATUS
51  _In_ PDEVICE_OBJECT DeviceObject,
52  _Inout_ PIRP Irp
53  );
54 
55 NTSTATUS
57  _In_ PIRP Irp
58  );
59 
60 NTSTATUS
62  _In_ PIRP Irp
63  );
64 
65 NTSTATUS
67  _In_ PIRP Irp
68  );
69 
70 NTSTATUS
72  _In_ PDEVICE_OBJECT DeviceObject,
73  _In_ ULONG IoControlCode,
74  _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer,
75  _In_ ULONG InputBufferLength,
76  _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer,
77  _In_ ULONG OutputBufferLength,
78  _Out_ PIO_STATUS_BLOCK IoStatus,
79  _In_opt_ PIRP Irp
80  );
81 
82 BOOLEAN
84  _In_ PFILE_OBJECT FileObject,
85  _In_ PLARGE_INTEGER FileOffset,
86  _In_ ULONG Length,
87  _In_ BOOLEAN Wait,
88  _In_ ULONG LockKey,
89  _In_ BOOLEAN CheckForReadOperation,
90  _Out_ PIO_STATUS_BLOCK IoStatus,
91  _In_ PDEVICE_OBJECT DeviceObject );
92 
93 BOOLEAN
95  _In_ PFILE_OBJECT FileObject,
96  _In_ PLARGE_INTEGER FileOffset,
97  _In_ ULONG Length,
98  _In_ BOOLEAN Wait,
99  _In_ ULONG LockKey,
100  _Out_writes_bytes_(Length) PVOID Buffer,
101  _Out_ PIO_STATUS_BLOCK IoStatus,
102  _In_ PDEVICE_OBJECT DeviceObject );
103 
104 BOOLEAN
106  _In_ PFILE_OBJECT FileObject,
107  _In_ PLARGE_INTEGER FileOffset,
108  _In_ ULONG Length,
109  _In_ BOOLEAN Wait,
110  _In_ ULONG LockKey,
111  _In_reads_bytes_(Length) PVOID Buffer,
112  _Out_ PIO_STATUS_BLOCK IoStatus,
113  _In_ PDEVICE_OBJECT DeviceObject );
114 
115 _Success_(IoStatus->Status == 0)
116 BOOLEAN
117 CdoFastIoQueryBasicInfo (
118  _In_ PFILE_OBJECT FileObject,
119  _In_ BOOLEAN Wait,
120  _Out_ PFILE_BASIC_INFORMATION Buffer,
121  _Out_ PIO_STATUS_BLOCK IoStatus,
122  _In_ PDEVICE_OBJECT DeviceObject );
123 
124 _Success_(IoStatus->Status == 0)
125 BOOLEAN
126 CdoFastIoQueryStandardInfo (
127  _In_ PFILE_OBJECT FileObject,
128  _In_ BOOLEAN Wait,
129  _Out_ PFILE_STANDARD_INFORMATION Buffer,
130  _Out_ PIO_STATUS_BLOCK IoStatus,
131  _In_ PDEVICE_OBJECT DeviceObject );
132 
133 BOOLEAN
135  _In_ PFILE_OBJECT FileObject,
136  _In_ PLARGE_INTEGER FileOffset,
137  _In_ PLARGE_INTEGER Length,
138  _In_ PEPROCESS ProcessId,
139  _In_ ULONG Key,
140  _In_ BOOLEAN FailImmediately,
141  _In_ BOOLEAN ExclusiveLock,
142  _Out_ PIO_STATUS_BLOCK IoStatus,
143  _In_ PDEVICE_OBJECT DeviceObject );
144 
145 BOOLEAN
147  _In_ PFILE_OBJECT FileObject,
148  _In_ PLARGE_INTEGER FileOffset,
149  _In_ PLARGE_INTEGER Length,
150  _In_ PEPROCESS ProcessId,
151  _In_ ULONG Key,
152  _Out_ PIO_STATUS_BLOCK IoStatus,
153  _In_ PDEVICE_OBJECT DeviceObject );
154 
155 BOOLEAN
157  _In_ PFILE_OBJECT FileObject,
158  _In_ PEPROCESS ProcessId,
159  _Out_ PIO_STATUS_BLOCK IoStatus,
160  _In_ PDEVICE_OBJECT DeviceObject );
161 
162 BOOLEAN
164  _In_ PFILE_OBJECT FileObject,
165  _In_ PVOID ProcessId,
166  _In_ ULONG Key,
167  _Out_ PIO_STATUS_BLOCK IoStatus,
168  _In_ PDEVICE_OBJECT DeviceObject );
169 
170 BOOLEAN
172  _In_ PFILE_OBJECT FileObject,
173  _In_ BOOLEAN Wait,
174  _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer,
175  _In_ ULONG InputBufferLength,
176  _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer,
177  _In_ ULONG OutputBufferLength,
178  _In_ ULONG IoControlCode,
179  _Out_ PIO_STATUS_BLOCK IoStatus,
180  _In_ PDEVICE_OBJECT DeviceObject);
181 
182 _Success_(IoStatus->Status == 0)
183 BOOLEAN
184 CdoFastIoQueryNetworkOpenInfo (
185  _In_ PFILE_OBJECT FileObject,
186  _In_ BOOLEAN Wait,
187  _Out_ PFILE_NETWORK_OPEN_INFORMATION Buffer,
188  _Out_ PIO_STATUS_BLOCK IoStatus,
189  _In_ PDEVICE_OBJECT DeviceObject );
190 
191 _Success_(IoStatus->Status == 0)
192 BOOLEAN
193 CdoFastIoMdlRead (
194  _In_ PFILE_OBJECT FileObject,
195  _In_ PLARGE_INTEGER FileOffset,
196  _In_ ULONG Length,
197  _In_ ULONG LockKey,
198  _Outptr_ PMDL *MdlChain,
199  _Out_ PIO_STATUS_BLOCK IoStatus,
200  _In_ PDEVICE_OBJECT DeviceObject );
201 
202 BOOLEAN
204  _In_ PFILE_OBJECT FileObject,
205  _In_ PMDL MdlChain,
206  _In_ PDEVICE_OBJECT DeviceObject );
207 
208 _Success_(IoStatus->Status == 0)
209 BOOLEAN
210 CdoFastIoPrepareMdlWrite (
211  _In_ PFILE_OBJECT FileObject,
212  _In_ PLARGE_INTEGER FileOffset,
213  _In_ ULONG Length,
214  _In_ ULONG LockKey,
215  _Outptr_ PMDL *MdlChain,
216  _Out_ PIO_STATUS_BLOCK IoStatus,
217  _In_ PDEVICE_OBJECT DeviceObject );
218 
219 BOOLEAN
221  _In_ PFILE_OBJECT FileObject,
222  _In_ PLARGE_INTEGER FileOffset,
223  _In_ PMDL MdlChain,
224  _In_ PDEVICE_OBJECT DeviceObject );
225 
226 _Success_(IoStatus->Status == 0)
227 BOOLEAN
228 CdoFastIoReadCompressed (
229  _In_ PFILE_OBJECT FileObject,
230  _In_ PLARGE_INTEGER FileOffset,
231  _In_ ULONG Length,
232  _In_ ULONG LockKey,
233  _Out_writes_bytes_(Length) PVOID Buffer,
234  _Outptr_ PMDL *MdlChain,
235  _Out_ PIO_STATUS_BLOCK IoStatus,
236  _Out_writes_bytes_(CompressedDataInfoLength) struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
238  _In_ PDEVICE_OBJECT DeviceObject);
239 
240 _Success_(IoStatus->Status == 0)
241 BOOLEAN
242 CdoFastIoWriteCompressed (
243  _In_ PFILE_OBJECT FileObject,
244  _In_ PLARGE_INTEGER FileOffset,
245  _In_ ULONG Length,
246  _In_ ULONG LockKey,
247  _In_reads_bytes_(Length) PVOID Buffer,
248  _Outptr_ PMDL *MdlChain,
249  _Out_ PIO_STATUS_BLOCK IoStatus,
250  _In_reads_bytes_(CompressedDataInfoLength) struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
251  _In_ ULONG CompressedDataInfoLength,
252  _In_ PDEVICE_OBJECT DeviceObject);
253 
254 BOOLEAN
256  _In_ PFILE_OBJECT FileObject,
257  _In_ PMDL MdlChain,
258  _In_ PDEVICE_OBJECT DeviceObject);
259 
260 BOOLEAN
262  _In_ PFILE_OBJECT FileObject,
263  _In_ PLARGE_INTEGER FileOffset,
264  _In_ PMDL MdlChain,
265  _In_ PDEVICE_OBJECT DeviceObject);
266 
267 _Success_(Irp->IoStatus.Status == 0)
268 BOOLEAN
269 CdoFastIoQueryOpen (
270  _In_ PIRP Irp,
271  _Out_ PFILE_NETWORK_OPEN_INFORMATION NetworkInformation,
272  _In_ PDEVICE_OBJECT DeviceObject);
273 
274 
275 
276 
277 //
278 // Resource support
279 //
280 
281 FORCEINLINE
282 VOID
283 _Acquires_lock_(_Global_critical_region_)
284 CdoAcquireResourceExclusive (
285  _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_exclusive_lock_(*_Curr_)
286  PERESOURCE Resource
287  )
288 {
289  FLT_ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
290  FLT_ASSERT(ExIsResourceAcquiredExclusiveLite(Resource) ||
291  !ExIsResourceAcquiredSharedLite(Resource));
292 
293  KeEnterCriticalRegion();
294  (VOID)ExAcquireResourceExclusiveLite( Resource, TRUE );
295 }
296 
297 FORCEINLINE
298 VOID
299 _Acquires_lock_(_Global_critical_region_)
300 CdoAcquireResourceShared (
301  _Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_shared_lock_(*_Curr_)
302  PERESOURCE Resource
303  )
304 {
305  FLT_ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
306 
307  KeEnterCriticalRegion();
308  (VOID)ExAcquireResourceSharedLite( Resource, TRUE );
309 }
310 
311 FORCEINLINE
312 VOID
313 _Releases_lock_(_Global_critical_region_)
314 _Requires_lock_held_(_Global_critical_region_)
315 CdoReleaseResource (
316  _Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_)
317  PERESOURCE Resource
318  )
319 {
320  FLT_ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
321  FLT_ASSERT(ExIsResourceAcquiredExclusiveLite(Resource) ||
322  ExIsResourceAcquiredSharedLite(Resource));
323 
324  ExReleaseResourceLite(Resource);
325  KeLeaveCriticalRegion();
326 }
327 
328 
BOOLEAN CdoFastIoUnlockAllByKey(_In_ PFILE_OBJECT FileObject, _In_ PVOID ProcessId, _In_ ULONG Key, _Out_ PIO_STATUS_BLOCK IoStatus, _In_ PDEVICE_OBJECT DeviceObject)
BOOLEAN CdoFastIoLock(_In_ PFILE_OBJECT FileObject, _In_ PLARGE_INTEGER FileOffset, _In_ PLARGE_INTEGER Length, _In_ PEPROCESS ProcessId, _In_ ULONG Key, _In_ BOOLEAN FailImmediately, _In_ BOOLEAN ExclusiveLock, _Out_ PIO_STATUS_BLOCK IoStatus, _In_ PDEVICE_OBJECT DeviceObject)
_In_ BOOLEAN _Out_ PFILE_BASIC_INFORMATION _Out_ PIO_STATUS_BLOCK _In_ PDEVICE_OBJECT DeviceObject
Definition: CdoProc.h:119
BOOLEAN CdoFastIoMdlWriteCompleteCompressed(_In_ PFILE_OBJECT FileObject, _In_ PLARGE_INTEGER FileOffset, _In_ PMDL MdlChain, _In_ PDEVICE_OBJECT DeviceObject)
_In_ PLARGE_INTEGER _In_ ULONG _In_ ULONG LockKey
Definition: CdoProc.h:195
NTSTATUS CdoHandlePrivateFsControl(_In_ PDEVICE_OBJECT DeviceObject, _In_ ULONG IoControlCode, _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer, _In_ ULONG InputBufferLength, _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer, _In_ ULONG OutputBufferLength, _Out_ PIO_STATUS_BLOCK IoStatus, _In_opt_ PIRP Irp)
BOOLEAN CdoFastIoMdlReadComplete(_In_ PFILE_OBJECT FileObject, _In_ PMDL MdlChain, _In_ PDEVICE_OBJECT DeviceObject)
_In_ BOOLEAN _Out_ PFILE_BASIC_INFORMATION Buffer
Definition: CdoProc.h:119
_Function_class_(DRIVER_INITIALIZE) NTSTATUS CdoCreateControlDeviceObject(_Inout_ PDRIVER_OBJECT DriverObject)
BOOLEAN CdoFastIoRead(_In_ PFILE_OBJECT FileObject, _In_ PLARGE_INTEGER FileOffset, _In_ ULONG Length, _In_ BOOLEAN Wait, _In_ ULONG LockKey, _Out_writes_bytes_(Length) PVOID Buffer, _Out_ PIO_STATUS_BLOCK IoStatus, _In_ PDEVICE_OBJECT DeviceObject)
BOOLEAN CdoFastIoDeviceControl(_In_ PFILE_OBJECT FileObject, _In_ BOOLEAN Wait, _In_reads_bytes_opt_(InputBufferLength) PVOID InputBuffer, _In_ ULONG InputBufferLength, _Out_writes_bytes_opt_(OutputBufferLength) PVOID OutputBuffer, _In_ ULONG OutputBufferLength, _In_ ULONG IoControlCode, _Out_ PIO_STATUS_BLOCK IoStatus, _In_ PDEVICE_OBJECT DeviceObject)
FLT_ASSERT(IS_MY_CONTROL_DEVICE_OBJECT(DeviceObject))
return TRUE
BOOLEAN CdoFastIoMdlWriteComplete(_In_ PFILE_OBJECT FileObject, _In_ PLARGE_INTEGER FileOffset, _In_ PMDL MdlChain, _In_ PDEVICE_OBJECT DeviceObject)
FORCEINLINE VOID _Releases_lock_(_Global_critical_region_) _Requires_lock_held_(_Global_critical_region_) CdoReleaseResource(_Inout_ _Requires_lock_held_(*_Curr_) _Releases_lock_(*_Curr_) PERESOURCE Resource)
Definition: CdoProc.h:313
BOOLEAN CdoFastIoWrite(_In_ PFILE_OBJECT FileObject, _In_ PLARGE_INTEGER FileOffset, _In_ ULONG Length, _In_ BOOLEAN Wait, _In_ ULONG LockKey, _In_reads_bytes_(Length) PVOID Buffer, _Out_ PIO_STATUS_BLOCK IoStatus, _In_ PDEVICE_OBJECT DeviceObject)
_In_ BOOLEAN Wait
Definition: CdoProc.h:119
VOID CdoDeleteControlDeviceObject(VOID)
_In_ PLARGE_INTEGER _In_ ULONG _In_ ULONG _Outptr_ PMDL _Out_ PIO_STATUS_BLOCK _In_ ULONG CompressedDataInfoLength
Definition: CdoProc.h:237
BOOLEAN CdoFastIoUnlockAll(_In_ PFILE_OBJECT FileObject, _In_ PEPROCESS ProcessId, _Out_ PIO_STATUS_BLOCK IoStatus, _In_ PDEVICE_OBJECT DeviceObject)
_In_ PLARGE_INTEGER FileOffset
Definition: CdoProc.h:195
FORCEINLINE VOID _Acquires_lock_(_Global_critical_region_) CdoAcquireResourceExclusive(_Inout_ _Requires_lock_not_held_(*_Curr_) _Acquires_exclusive_lock_(*_Curr_) PERESOURCE Resource)
Definition: CdoProc.h:283
_Out_ PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
Definition: CdoProc.h:271
NTSTATUS CdoHandlePrivateCleanup(_In_ PIRP Irp)
DRIVER_DISPATCH CdoMajorFunction
Definition: CdoProc.h:48
BOOLEAN CdoFastIoMdlReadCompleteCompressed(_In_ PFILE_OBJECT FileObject, _In_ PMDL MdlChain, _In_ PDEVICE_OBJECT DeviceObject)
IoStatus Status
_In_ PLARGE_INTEGER _In_ ULONG _In_ ULONG _Out_writes_bytes_(Length) PVOID Buffer
_In_ PLARGE_INTEGER _In_ ULONG _In_ ULONG _Outptr_ PMDL * MdlChain
Definition: CdoProc.h:195
_Success_(IoStatus->Status==0) BOOLEAN CdoFastIoQueryBasicInfo(_In_ PFILE_OBJECT FileObject
_In_ PLARGE_INTEGER _In_ ULONG _In_ ULONG _In_reads_bytes_(Length) PVOID Buffer
NTSTATUS CdoHandlePrivateOpen(_In_ PIRP Irp)
_Requires_lock_held_(_Global_critical_region_)
Definition: DataStore.c:38
BOOLEAN CdoFastIoCheckIfPossible(_In_ PFILE_OBJECT FileObject, _In_ PLARGE_INTEGER FileOffset, _In_ ULONG Length, _In_ BOOLEAN Wait, _In_ ULONG LockKey, _In_ BOOLEAN CheckForReadOperation, _Out_ PIO_STATUS_BLOCK IoStatus, _In_ PDEVICE_OBJECT DeviceObject)
NTSTATUS CdoHandlePrivateClose(_In_ PIRP Irp)
BOOLEAN CdoFastIoUnlockSingle(_In_ PFILE_OBJECT FileObject, _In_ PLARGE_INTEGER FileOffset, _In_ PLARGE_INTEGER Length, _In_ PEPROCESS ProcessId, _In_ ULONG Key, _Out_ PIO_STATUS_BLOCK IoStatus, _In_ PDEVICE_OBJECT DeviceObject)
_In_ BOOLEAN _Out_ PFILE_BASIC_INFORMATION _Out_ PIO_STATUS_BLOCK IoStatus
Definition: CdoProc.h:119
_In_opt_ PFILE_OBJECT FileObject
Definition: nc.h:493
_In_ PLARGE_INTEGER _In_ ULONG Length
Definition: CdoProc.h:195

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