ReactOS 0.4.15-dev-7953-g1f49173
struct.h
Go to the documentation of this file.
1
2// Copyright (C) Alexander Telyatnikov, Ivan Keliukh, Yegor Anchishkin, SKIF Software, 1999-2013. Kiev, Ukraine
3// All rights reserved
4// This file was released under the GPLv2 on June 2015.
6/*************************************************************************
7*
8* File: struct.h
9*
10* Module: UDF File System Driver (Kernel mode execution only)
11*
12* Description:
13* This file contains structure definitions for the UDF file system
14* driver. Note that all structures are prefixed with the letters
15* "UDF". The structures are all aligned using normal alignment
16* used by the compiler (typically quad-word aligned).
17*
18*************************************************************************/
19
20#ifndef _UDF_STRUCTURES_H_
21#define _UDF_STRUCTURES_H_
22
23
24/**************************************************************************
25 some useful definitions
26**************************************************************************/
27
28#include "Include/platform.h"
29
30/**************************************************************************
31 some empty typedefs defined here so we can reference them easily
32**************************************************************************/
33struct _UDFIdentifier;
34struct _UDFObjectName;
37struct _UDFDiskDependentFCB;
40struct _UDFIrpContext;
42struct _UDF_FILE_INFO;
43struct _UDFData;
46struct _SparingEntry;
47struct _UDFTrackMap;
48
49/**************************************************************************
50 include udf related structures *here* (because we need definition of Fcb)
51**************************************************************************/
52#include "udf_info/udf_rel.h"
53
54/**************************************************************************
55 each structure has a unique "node type" or signature associated with it
56**************************************************************************/
57#define UDF_NODE_TYPE_NT_REQ_FCB ((CSHORT)(0xfcb0))
58#define UDF_NODE_TYPE_OBJECT_NAME (0xfdecba01)
59#define UDF_NODE_TYPE_CCB (0xfdecba02)
60#define UDF_NODE_TYPE_FCB (0xfdecba03)
61#define UDF_NODE_TYPE_VCB (0xfdecba04)
62#define UDF_NODE_TYPE_IRP_CONTEXT (0xfdecba05)
63#define UDF_NODE_TYPE_GLOBAL_DATA (0xfdecba06)
64#define UDF_NODE_TYPE_FILTER_DEVOBJ (0xfdecba07)
65#define UDF_NODE_TYPE_UDFFS_DEVOBJ (0xfdecba08)
66#define UDF_NODE_TYPE_IRP_CONTEXT_LITE (0xfdecba09)
67#define UDF_NODE_TYPE_UDFFS_DRVOBJ (0xfdecba0a)
68
69/**************************************************************************
70 every structure has a node type, and a node size associated with it.
71 The node type serves as a signature field. The size is used for
72 consistency checking ...
73**************************************************************************/
74typedef struct _UDFIdentifier {
75 uint32 NodeType; // a 32 bit identifier for the structure
76 uint32 NodeSize; // computed as sizeof(structure)
78
79/**************************************************************************
80 Every open on-disk object must have a name associated with it
81 This name has two components:
82 (a) the path-name (prefix) that leads to this on-disk object
83 (b) the name of the object itself
84 Note that with multiply linked objects, a single object might be
85 associated with more than one name structure.
86 This UDF FSD does not correctly support multiply linked objects.
87
88 This structure must be quad-word aligned because it is zone allocated.
89**************************************************************************/
90typedef struct _UDFObjectName {
93 // an absolute pathname of the object is stored below
96
97#define UDF_OBJ_NAME_NOT_FROM_ZONE (0x80000000)
98
99/**************************************************************************
100 Each file open instance is represented by a context control block.
101 For each successful create/open request; a file object and a CCB will
102 be created.
103 For open operations performed internally by the FSD, there may not
104 exist file objects; but a CCB will definitely be created.
105
106 This structure must be quad-word aligned because it is zone allocated.
107**************************************************************************/
110 // ptr to the associated FCB
112 // all CCB structures for a FCB are linked together
114 // each CCB is associated with a file object
116 // flags (see below) associated with this CCB
118 // current index in directory is required sometimes
120 // if this CCB represents a directory object open, we may
121 // need to maintain a search pattern
125 // Acces rights previously granted to caller's thread
128
129
130/**************************************************************************
131 the following CCBFlags values are relevant. These flag
132 values are bit fields; therefore we can test whether
133 a bit position is set (1) or not set (0).
134**************************************************************************/
135
136// some on-disk file/directories are opened by UDF itself
137// as opposed to being opened on behalf of a user process
138#define UDF_CCB_OPENED_BY_UDF (0x00000001)
139// the file object specified synchronous access at create/open time.
140// this implies that UDF must maintain the current byte offset
141#define UDF_CCB_OPENED_FOR_SYNC_ACCESS (0x00000002)
142// file object specified sequential access for this file
143#define UDF_CCB_OPENED_FOR_SEQ_ACCESS (0x00000004)
144// the CCB has had an IRP_MJ_CLEANUP issued on it. we must
145// no longer allow the file object / CCB to be used in I/O requests.
146#define UDF_CCB_CLEANED (0x00000008)
147// if we were invoked via the fast i/o path to perform file i/o;
148// we should set the CCB access/modification time at cleanup
149#define UDF_CCB_ACCESSED (0x00000010)
150#define UDF_CCB_MODIFIED (0x00000020)
151// if an application process set the file date time, we must
152// honor that request and *not* overwrite the values at cleanup
153#define UDF_CCB_ACCESS_TIME_SET (0x00000040)
154#define UDF_CCB_MODIFY_TIME_SET (0x00000080)
155#define UDF_CCB_CREATE_TIME_SET (0x00000100)
156#define UDF_CCB_WRITE_TIME_SET (0x00000200)
157#define UDF_CCB_ATTRIBUTES_SET (0x00020000)
158
159#define UDF_CCB_CASE_SENSETIVE (0x00000400)
160
161#ifndef UDF_READ_ONLY_BUILD
162#define UDF_CCB_DELETE_ON_CLOSE (0x00000800)
163#endif //UDF_READ_ONLY_BUILD
164
165// this CCB was allocated for a "volume open" operation
166#define UDF_CCB_VOLUME_OPEN (0x00001000)
167#define UDF_CCB_MATCH_ALL (0x00002000)
168#define UDF_CCB_WILDCARD_PRESENT (0x00004000)
169#define UDF_CCB_CAN_BE_8_DOT_3 (0x00008000)
170#define UDF_CCB_READ_ONLY (0x00010000)
171//#define UDF_CCB_ATTRIBUTES_SET (0x00020000) // see above
172
173#define UDF_CCB_FLUSHED (0x20000000)
174#define UDF_CCB_VALID (0x40000000)
175#define UDF_CCB_NOT_FROM_ZONE (0x80000000)
176
177
178/**************************************************************************
179 each open file/directory/volume is represented by a file control block.
180
181 Each FCB can logically be divided into two:
182 (a) a structure that must have a field of type FSRTL_COMMON_FCB_HEADER
183 as the first field in the structure.
184 This portion should also contain other structures/resources required
185 by the NT Cache Manager
186 We will call this structure the "NT Required" FCB. Note that this
187 portion of the FCB must be allocated from non-paged pool.
188 (b) the remainder of the FCB is dependent upon the particular FSD
189 requirements.
190 This portion of the FCB could possibly be allocated from paged
191 memory, though in the UDF FSD, it will always be allocated
192 from non-paged pool.
193
194 FCB structures are protected by the MainResource as well as the
195 PagingIoResource. Of course, if the FSD implementation requires
196 it, we can associate other syncronization structures with the
197 FCB.
198
199 These structures must be quad-word aligned because they are zone-allocated.
200**************************************************************************/
201
202typedef struct _UDFNTRequiredFCB {
203
209 // we will maintain some time information here to make our life easier
214 // NT requires that a file system maintain and honor the various
215 // SHARE_ACCESS modes ...
217 // This counter is used to prevent unexpected structure releases
221 // to identify the lazy writer thread(s) we will grab and store
222 // the thread id here when a request to acquire resource(s)
223 // arrives ..
227#ifdef DBG
229#endif //DBG
232
233#define UDF_NTREQ_FCB_SD_MODIFIED (0x00000001)
234#define UDF_NTREQ_FCB_INLIST (0x00000002)
235#define UDF_NTREQ_FCB_DELETED (0x00000004)
236#define UDF_NTREQ_FCB_MODIFIED (0x00000008)
237#define UDF_NTREQ_FCB_VALID (0x40000000)
238
239/**************************************************************************/
240
241#define UDF_FCB_MT NonPagedPool
242
243/***************************************************/
244/***************** W A R N I N G *****************/
245/***************************************************/
246
247/***************************************************/
248/* DO NOT FORGET TO UPDATE VCB's HEADER ! */
249/***************************************************/
250
251typedef struct _UDFFileControlBlock {
253 // we will not embed the "NT Required FCB" here, 'cause we dislike
254 // troubles with Hard(&Symbolic) Links
256 // UDF related data
258 // this FCB belongs to some mounted logical volume
260 // to be able to access all open file(s) for a volume, we will
261 // link all FCB structures for a logical volume together
263 // some state information for the FCB is maintained using the
264 // flags field
266 // all CCB's for this particular FCB are linked off the following
267 // list head.
269 // whenever a file stream has a create/open operation performed,
270 // the Reference count below is incremented AND the OpenHandle count
271 // below is also incremented.
272 // When an IRP_MJ_CLEANUP is received, the OpenHandle count below
273 // is decremented.
274 // When an IRP_MJ_CLOSE is received, the Reference count below is
275 // decremented.
276 // When the Reference count goes down to zero, the FCB can be de-allocated.
277 // Note that a zero Reference count implies a zero OpenHandle count.
278 // But when we have mapped data, we can receive no IRP_MJ_CLOSE
279 // In this case OpenHandleCount may reach zero, but ReferenceCount may
280 // be non-zero.
284 // for the UDF fsd, there exists a 1-1 correspondence between a
285 // full object pathname and a FCB
288
290 // Pointer to IrpContextLite in delayed queue.
294
295/**************************************************************************
296 the following FCBFlags values are relevant. These flag
297 values are bit fields; therefore we can test whether
298 a bit position is set (1) or not set (0).
299**************************************************************************/
300#define UDF_FCB_VALID (0x00000002)
301
302#define UDF_FCB_PAGE_FILE (0x00000004)
303#define UDF_FCB_DIRECTORY (0x00000008)
304#define UDF_FCB_ROOT_DIRECTORY (0x00000010)
305#define UDF_FCB_WRITE_THROUGH (0x00000020)
306#define UDF_FCB_MAPPED (0x00000040)
307#define UDF_FCB_FAST_IO_READ_IN_PROGESS (0x00000080)
308#define UDF_FCB_FAST_IO_WRITE_IN_PROGESS (0x00000100)
309#define UDF_FCB_DELETE_ON_CLOSE (0x00000200)
310#define UDF_FCB_MODIFIED (0x00000400)
311#define UDF_FCB_ACCESSED (0x00000800)
312#define UDF_FCB_READ_ONLY (0x00001000)
313#define UDF_FCB_DELAY_CLOSE (0x00002000)
314#define UDF_FCB_DELETED (0x00004000)
315
316#define UDF_FCB_INITIALIZED_CCB_LIST_RESOURCE (0x00008000)
317#define UDF_FCB_POSTED_RENAME (0x00010000)
318
319#define UDF_FCB_DELETE_PARENT (0x10000000)
320#define UDF_FCB_NOT_FROM_ZONE (0x80000000)
321
322/**************************************************************************
323 A logical volume is represented with the following structure.
324 This structure is allocated as part of the device extension
325 for a device object that this FSD will create, to represent
326 the mounted logical volume.
327
328**************************************************************************/
329
330#define _BROWSE_UDF_
331
332// Common UDF-related definitions
333#include "Include/udf_common.h"
334
335// One for root
336#define UDF_RESIDUAL_REFERENCE (2)
337
338// input flush flags
339#define UDF_FLUSH_FLAGS_BREAKABLE (0x00000001)
340// see also udf_rel.h
341#define UDF_FLUSH_FLAGS_LITE (0x80000000)
342// output flush flags
343#define UDF_FLUSH_FLAGS_INTERRUPTED (0x00000001)
344
345#define UDF_MAX_BG_WRITERS 16
346
347typedef struct _FILTER_DEV_EXTENSION {
352
353typedef struct _UDFFS_DEV_EXTENSION {
356/**************************************************************************
357 The IRP context encapsulates the current request. This structure is
358 used in the "common" dispatch routines invoked either directly in
359 the context of the original requestor, or indirectly in the context
360 of a system worker thread.
361**************************************************************************/
362typedef struct _UDFIrpContext {
365 // copied from the IRP
367 // copied from the IRP
369 // to queue this IRP for asynchronous processing
371 // the IRP for which this context structure was created
373 // the target of the request (obtained from the IRP)
375 // if an exception occurs, we will store the code here
377 // For queued close operation we save Fcb
382 // support for delayed close
384
385#define UDF_IRP_CONTEXT_CAN_BLOCK (0x00000001)
386#define UDF_IRP_CONTEXT_WRITE_THROUGH (0x00000002)
387#define UDF_IRP_CONTEXT_EXCEPTION (0x00000004)
388#define UDF_IRP_CONTEXT_DEFERRED_WRITE (0x00000008)
389#define UDF_IRP_CONTEXT_ASYNC_PROCESSING (0x00000010)
390#define UDF_IRP_CONTEXT_NOT_TOP_LEVEL (0x00000020)
391#define UDF_IRP_CONTEXT_FLAG_DISABLE_POPUPS (0x00000040)
392#define UDF_IRP_CONTEXT_FLUSH_REQUIRED (0x00000080)
393#define UDF_IRP_CONTEXT_FLUSH2_REQUIRED (0x00000100)
394#define UDF_IRP_CONTEXT_READ_ONLY (0x00010000)
395#define UDF_IRP_CONTEXT_RES1_ACQ (0x01000000)
396#define UDF_IRP_CONTEXT_RES2_ACQ (0x02000000)
397#define UDF_IRP_CONTEXT_FORCED_POST (0x20000000)
398#define UDF_IRP_CONTEXT_BUFFER_LOCKED (0x40000000)
399#define UDF_IRP_CONTEXT_NOT_FROM_ZONE (0x80000000)
400
401/**************************************************************************
402 Following structure is used to queue a request to the delayed close queue.
403 This structure should be the minimum block allocation size.
404**************************************************************************/
405typedef struct _UDFIrpContextLite {
407 // Fcb for the file object being closed.
409 // List entry to attach to delayed close queue.
411 // User reference count for the file object being closed.
412 //ULONG UserReference;
413 // Real device object. This represents the physical device closest to the media.
418
419
420
421
422// a default size of the number of pages of non-paged pool allocated
423// for each of the zones ...
424
425// Note that the values are absolutely arbitrary, the only information
426// worth using from the values themselves is that they increase for
427// larger systems (i.e. systems with more memory)
428#define UDF_DEFAULT_ZONE_SIZE_SMALL_SYSTEM (0x4)
429#define UDF_DEFAULT_ZONE_SIZE_MEDIUM_SYSTEM (0x8)
430#define UDF_DEFAULT_ZONE_SIZE_LARGE_SYSTEM (0xc)
431
432// another simplistic (brain dead ? :-) method used is to simply double
433// the values for a "server" machine
434
435// So, for all you guys who "modified" the registry ;-) to change the
436// wkstation into a server, tough luck !
437#define UDF_NTAS_MULTIPLE (0x2)
438
439typedef struct _UDFEjectWaitContext {
441
444
448
450 UCHAR PaddingEvt[(0x40 - sizeof(GET_EVENT_USER_OUT)) & 0x0f];
451
454
457
460
461typedef struct _UDFBGWriteContext {
463 PVOID Buffer; // Target buffer
470
471// Define the file system statistics struct. Vcb->Statistics points to an
472// array of these (one per processor) and they must be 64 byte aligned to
473// prevent cache line tearing.
474typedef struct _FILE_SYSTEM_STATISTICS {
475 // This contains the actual data.
478 // Pad this structure to a multiple of 64 bytes.
479 UCHAR Pad[64-(sizeof(FILESYSTEM_STATISTICS)+sizeof(FAT_STATISTICS))%64];
481
482//
483typedef struct _UDFFileIDCacheItem {
488
489#define DIRTY_PAGE_LIMIT 32
490
491#endif /* _UDF_STRUCTURES_H_ */ // has this file been included?
492
unsigned char BOOLEAN
LONG NTSTATUS
Definition: precomp.h:26
unsigned int uint32
Definition: types.h:32
unsigned char uint8
Definition: types.h:28
struct _GET_LAST_ERROR_USER_OUT GET_LAST_ERROR_USER_OUT
union _GET_EVENT_USER_OUT GET_EVENT_USER_OUT
struct _GET_CAPABILITIES_USER_OUT GET_CAPABILITIES_USER_OUT
ULONG ERESOURCE
Definition: env_spec_w32.h:594
ULONG ACCESS_MASK
Definition: nt_native.h:40
struct _FILESYSTEM_STATISTICS FILESYSTEM_STATISTICS
struct _UDFFileControlBlock UDFFCB
struct _UDFObjectName UDFObjectName
struct _UDFObjectName * PtrUDFObjectName
struct _UDFFS_DEV_EXTENSION UDFFS_DEV_EXTENSION
struct _UDFBGWriteContext * PUDFBGWriteContext
struct _UDFFileControlBlock * PtrUDFFCB
struct _FILTER_DEV_EXTENSION * PFILTER_DEV_EXTENSION
struct _UDFEjectWaitContext UDFEjectWaitContext
struct _UDFEjectWaitContext * PUDFEjectWaitContext
struct _UDFIrpContext * PtrUDFIrpContext
struct _UDFNTRequiredFCB * PtrUDFNTRequiredFCB
struct _UDFIdentifier UDFIdentifier
struct _UDFIrpContext UDFIrpContext
struct _UDFIdentifier * PtrUDFIdentifier
struct _UDFBGWriteContext UDFBGWriteContext
struct _UDFContextControlBlock * PtrUDFCCB
struct _UDFContextControlBlock UDFCCB
struct _UDFIrpContextLite * PtrUDFIrpContextLite
struct _UDFFS_DEV_EXTENSION * PUDFFS_DEV_EXTENSION
struct _FILTER_DEV_EXTENSION FILTER_DEV_EXTENSION
struct _UDFFileIDCacheItem * PUDFFileIDCacheItem
struct _FILE_SYSTEM_STATISTICS * PFILE_SYSTEM_STATISTICS
struct _FILE_SYSTEM_STATISTICS FILE_SYSTEM_STATISTICS
struct _UDFIrpContextLite UDFIrpContextLite
struct _UDFNTRequiredFCB UDFNTRequiredFCB
struct _UDFFileIDCacheItem UDFFileIDCacheItem
FILESYSTEM_STATISTICS Common
Definition: fatstruc.h:601
UCHAR Pad[((FILE_SYSTEM_STATISTICS_WITHOUT_PAD+0x3f) &~0x3f) - FILE_SYSTEM_STATISTICS_WITHOUT_PAD]
Definition: fatstruc.h:608
FAT_STATISTICS Fat
Definition: fatstruc.h:602
PDEVICE_OBJECT lowerFSDeviceObject
Definition: struct.h:350
PFILE_OBJECT fileObject
Definition: struct.h:349
UDFIdentifier NodeIdentifier
Definition: struct.h:348
Definition: udf_rel.h:128
Definition: typedefs.h:120
BOOLEAN FreeBuffer
Definition: struct.h:467
WORK_QUEUE_ITEM WorkQueueItem
Definition: struct.h:468
ULONG WrittenBytes
Definition: struct.h:466
PFILE_OBJECT FileObject
Definition: struct.h:115
LIST_ENTRY NextCCB
Definition: struct.h:113
HASH_ENTRY hashes
Definition: struct.h:123
UDFIdentifier NodeIdentifier
Definition: struct.h:109
ACCESS_MASK PreviouslyGrantedAccess
Definition: struct.h:126
PUNICODE_STRING DirectorySearchPattern
Definition: struct.h:122
struct _UDFFileControlBlock * Fcb
Definition: struct.h:111
WORK_QUEUE_ITEM EjectReqWorkQueueItem
Definition: struct.h:447
UCHAR PaddingEvt[(0x40 - sizeof(GET_EVENT_USER_OUT)) &0x0f]
Definition: struct.h:450
BOOLEAN SoftEjectReq
Definition: struct.h:442
GET_EVENT_USER_OUT EjectReqBuffer
Definition: struct.h:449
UCHAR PaddingDevCap[(0x40 - sizeof(GET_CAPABILITIES_USER_OUT)) &0x0f]
Definition: struct.h:453
PKEVENT WaiterStopped
Definition: struct.h:446
UCHAR Padding0[3]
Definition: struct.h:443
GET_CAPABILITIES_USER_OUT DevCap
Definition: struct.h:452
UCHAR PaddingError[(0x40 - sizeof(GET_LAST_ERROR_USER_OUT)) &0x0f]
Definition: struct.h:456
GET_LAST_ERROR_USER_OUT Error
Definition: struct.h:455
UDFIdentifier NodeIdentifier
Definition: struct.h:354
struct _UDFVolumeControlBlock * Vcb
Definition: struct.h:259
ERESOURCE CcbListResource
Definition: struct.h:287
PtrUDFObjectName FCBName
Definition: struct.h:286
struct _UDFIrpContextLite * IrpContextLite
Definition: struct.h:291
struct _UDFFileControlBlock * ParentFcb
Definition: struct.h:289
PtrUDFNTRequiredFCB NTRequiredFCB
Definition: struct.h:255
uint32 OpenHandleCount
Definition: struct.h:282
uint32 CachedOpenHandleCount
Definition: struct.h:283
uint32 ReferenceCount
Definition: struct.h:281
UDFIdentifier NodeIdentifier
Definition: struct.h:252
PUDF_FILE_INFO FileInfo
Definition: struct.h:257
LIST_ENTRY NextCCB
Definition: struct.h:268
LIST_ENTRY NextFCB
Definition: struct.h:262
UNICODE_STRING FullName
Definition: struct.h:485
BOOLEAN CaseSens
Definition: struct.h:486
uint32 NodeType
Definition: struct.h:75
uint32 NodeSize
Definition: struct.h:76
LIST_ENTRY DelayedCloseLinks
Definition: struct.h:410
PDEVICE_OBJECT RealDevice
Definition: struct.h:414
_UDFFileControlBlock * Fcb
Definition: struct.h:408
UDFIdentifier NodeIdentifier
Definition: struct.h:406
uint32 IrpContextFlags
Definition: struct.h:416
ULONG TreeLength
Definition: struct.h:415
PMDL PtrMdl
Definition: struct.h:380
UDFIdentifier NodeIdentifier
Definition: struct.h:363
_UDFFileControlBlock * Fcb
Definition: struct.h:378
uint32 IrpContextFlags
Definition: struct.h:364
WORK_QUEUE_ITEM WorkQueueItem
Definition: struct.h:370
uint8 MinorFunction
Definition: struct.h:368
PCHAR TransitionBuffer
Definition: struct.h:381
ULONG TreeLength
Definition: struct.h:379
uint8 MajorFunction
Definition: struct.h:366
PDEVICE_OBJECT TargetDeviceObject
Definition: struct.h:374
NTSTATUS SavedExceptionCode
Definition: struct.h:376
LARGE_INTEGER CreationTime
Definition: struct.h:210
PSECURITY_DESCRIPTOR SecurityDesc
Definition: struct.h:219
ERESOURCE MainResource
Definition: struct.h:207
LARGE_INTEGER LastWriteTime
Definition: struct.h:212
ULONG CommonRefCount
Definition: struct.h:218
ULONG NtReqFCBFlags
Definition: struct.h:220
UCHAR AcqSectionCount
Definition: struct.h:225
SHARE_ACCESS FCBShareAccess
Definition: struct.h:216
ERESOURCE PagingIoResource
Definition: struct.h:208
LARGE_INTEGER LastAccessTime
Definition: struct.h:211
PETHREAD CloseThread
Definition: struct.h:230
FILE_LOCK FileLock
Definition: struct.h:206
UCHAR AcqFlushCount
Definition: struct.h:226
uint32 LazyWriterThreadID
Definition: struct.h:224
SECTION_OBJECT_POINTERS SectionObject
Definition: struct.h:205
FSRTL_COMMON_FCB_HEADER CommonFCBHeader
Definition: struct.h:204
LARGE_INTEGER ChangeTime
Definition: struct.h:213
UDFIdentifier NodeIdentifier
Definition: struct.h:91
uint32 ObjectNameFlags
Definition: struct.h:92
UNICODE_STRING ObjectName
Definition: struct.h:94
Definition: cdstruc.h:498
int64_t LONGLONG
Definition: typedefs.h:68
uint32_t ULONG
Definition: typedefs.h:59
char * PCHAR
Definition: typedefs.h:51
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
Definition: wdfdevice.h:550
* PFILE_OBJECT
Definition: iotypes.h:1998
unsigned char UCHAR
Definition: xmlstorage.h:181