ReactOS  0.4.15-dev-1636-gf634010
wdfobject.h
Go to the documentation of this file.
1 /*++
2 
3 Copyright (c) Microsoft Corporation. All rights reserved.
4 
5 _WdfVersionBuild_
6 
7 Module Name:
8 
9  wdfobject.h
10 
11 Abstract:
12 
13  This is the C header for driver frameworks objects
14 
15 Revision History:
16 
17 
18 --*/
19 
20 //
21 // NOTE: This header is generated by stubwork. Please make any
22 // modifications to the corresponding template files
23 // (.x or .y) and use stubwork to regenerate the header
24 //
25 
26 #ifndef _WDFOBJECT_H_
27 #define _WDFOBJECT_H_
28 
29 #ifndef WDF_EXTERN_C
30  #ifdef __cplusplus
31  #define WDF_EXTERN_C extern "C"
32  #define WDF_EXTERN_C_START extern "C" {
33  #define WDF_EXTERN_C_END }
34  #else
35  #define WDF_EXTERN_C
36  #define WDF_EXTERN_C_START
37  #define WDF_EXTERN_C_END
38  #endif
39 #endif
40 
42 
43 
44 
45 #if (NTDDI_VERSION >= NTDDI_WIN2K)
46 
47 //
48 // Specifies the highest IRQL level allowed on callbacks
49 // to the device driver.
50 //
51 typedef enum _WDF_EXECUTION_LEVEL {
57 
58 //
59 // Specifies the concurrency of callbacks to the device driver
60 //
68 
69 
70 
71 typedef
72 _Function_class_(EVT_WDF_OBJECT_CONTEXT_CLEANUP)
75 VOID
76 STDCALL
77 EVT_WDF_OBJECT_CONTEXT_CLEANUP(
78  _In_
80  );
81 
82 typedef EVT_WDF_OBJECT_CONTEXT_CLEANUP *PFN_WDF_OBJECT_CONTEXT_CLEANUP;
83 
84 typedef
85 _Function_class_(EVT_WDF_OBJECT_CONTEXT_DESTROY)
88 VOID
89 STDCALL
90 EVT_WDF_OBJECT_CONTEXT_DESTROY(
91  _In_
93  );
94 
95 typedef EVT_WDF_OBJECT_CONTEXT_DESTROY *PFN_WDF_OBJECT_CONTEXT_DESTROY;
96 
97 
99 
100 typedef struct _WDF_OBJECT_ATTRIBUTES {
101  //
102  // Size in bytes of this structure
103  //
105 
106  //
107  // Function to call when the object is deleted
108  //
110 
111  //
112  // Function to call when the objects memory is destroyed when the
113  // the last reference count goes to zero
114  //
116 
117  //
118  // Execution level constraints for Object
119  //
121 
122  //
123  // Synchronization level constraint for Object
124  //
126 
127  //
128  // Optional Parent Object
129  //
131 
132  //
133  // Overrides the size of the context allocated as specified by
134  // ContextTypeInfo->ContextSize
135  //
137 
138  //
139  // Pointer to the type information to be associated with the object
140  //
142 
144 
146 VOID
149  )
150 {
152  Attributes->Size = sizeof(WDF_OBJECT_ATTRIBUTES);
155 }
156 
157 #define WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE(_attributes, _contexttype) \
158  (_attributes)->ContextTypeInfo = WDF_GET_CONTEXT_TYPE_INFO(_contexttype)->UniqueType
159 //
160 // VOID
161 // FORCEINLINE
162 // WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(
163 // PWDF_OBJECT_ATTRIBUTES Attributes,
164 // <typename>
165 // )
166 //
167 // NOTE: Do not put a ; at the end of the last line. This will require the
168 // caller to specify a ; after the call.
169 //
170 #define WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(_attributes, _contexttype) \
171  WDF_OBJECT_ATTRIBUTES_INIT(_attributes); \
172  WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE(_attributes, _contexttype)
173 
174 typedef
177  VOID
178  );
179 
180 //
181 // Since C does not have strong type checking we must invent our own
182 //
184  //
185  // The size of this structure in bytes
186  //
188 
189  //
190  // String representation of the context's type name, i.e. "DEVICE_CONTEXT"
191  //
193 
194  //
195  // The size of the context in bytes. This will be the size of the context
196  // associated with the handle unless
197  // WDF_OBJECT_ATTRIBUTES::ContextSizeOverride is specified.
198  //
199  size_t ContextSize;
200 
201  //
202  // If NULL, this structure is the unique type identifier for the context
203  // type. If != NULL, the UniqueType pointer value is the unique type id
204  // for the context type.
205  //
207 
208  //
209  // Function pointer to retrieve the context type information structure
210  // pointer from the provider of the context type. This function is invoked
211  // by the client driver's entry point by the KMDF stub after all class
212  // drivers are loaded and before DriverEntry is invoked.
213  //
215 
217 
218 //
219 // Converts a type name a unique name in which we can retrieve type specific
220 // information.
221 //
222 #define WDF_TYPE_NAME_TO_TYPE_INFO(_contexttype) \
223  _WDF_ ## _contexttype ## _TYPE_INFO
224 
225 //
226 // Converts a type name a unique name to the structure which will initialize
227 // it through an external component.
228 //
229 #define WDF_TYPE_NAME_TO_EXTERNAL_INIT(_contexttype) \
230  _WDF_ ## _contexttype ## _EXTERNAL_INIT
231 
232 #define WDF_TYPE_NAME_TO_EXTERNAL_INIT_FUNCTION(_contexttype) \
233  _contexttype ## _EXTERNAL_INIT_FUNCTION
234 
235 //
236 // Returns an address to the type information representing this typename
237 //
238 #define WDF_GET_CONTEXT_TYPE_INFO(_contexttype) \
239  (&WDF_TYPE_NAME_TO_TYPE_INFO(_contexttype))
240 
241 //
242 // Used to help generate our own usable pointer to the type typedef. For instance,
243 // a call as WDF_TYPE_NAME_POINTER_TYPE(DEVICE_CONTEXT) would generate:
244 //
245 // WDF_POINTER_TYPE_DEVICE_CONTEXT
246 //
247 // which would be the equivalent of DEVICE_CONTEXT*
248 //
249 #define WDF_TYPE_NAME_POINTER_TYPE(_contexttype) \
250  WDF_POINTER_TYPE_ ## _contexttype
251 
252 //
253 // Declares a typename so that in can be associated with a handle. This will
254 // use the type's name with a _ prepended as the "friendly name" (which results
255 // in the autogenerated casting function being named WdfObjectGet_<typename>, ie
256 // WdfObjectGet_DEVICE_CONTEXT. See WDF_DECLARE_CONTEXT_TYPE_WITH_NAME for
257 // more details on what is generated.
258 //
259 #define WDF_DECLARE_CONTEXT_TYPE(_contexttype) \
260  WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(_contexttype, WdfObjectGet_ ## _contexttype)
261 
262 //
263 // WDF_DECLARE_CONTEXT_TYPE_WITH_NAME performs the following 3 tasks
264 //
265 // 1) declare a typedef for the context type so that its pointer type can be
266 // referred to later
267 // 2) declare and initialize global structure that represents the type
268 // information for this
269 // context type
270 // 3) declare and implement a function named _castingfunction
271 // which does the proper type conversion.
272 //
273 // WDF_DECLARE_TYPE_AND_GLOBALS implements 1 & 2
274 // WDF_DECLARE_CASTING_FUNCTION implements 3
275 //
276 // For instance, the invocation of
277 // WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(DEVICE_CONTEXT, WdfDeviceGetContext)
278 // would result in the following being generated:
279 //
280 // typedef DEVICE_CONTEXT* WDF_POINTER_TYPE_DEVICE_CONTEXT;
281 //
282 // extern const __declspec(selectany) WDF_OBJECT_CONTEXT_TYPE_INFO _WDF_DEVICE_CONTEXT_TYPE_INFO =
283 // {
284 // sizeof(WDF_OBJECT_CONTEXT_TYPE_INFO),
285 // "DEVICE_CONTEXT",
286 // sizeof(DEVICE_CONTEXT),
287 // };
288 //
289 // WDF_POINTER_TYPE_DEVICE_CONTEXT
290 // WdfDeviceGetContext(
291 // WDFOBJECT Handle
292 // )
293 // {
294 // return (WDF_POINTER_TYPE_DEVICE_CONTEXT)
295 // WdfObjectGetTypedContextWorker(
296 // Handle,
297 // (&_WDF_DEVICE_CONTEXT_TYPE_INFO)->UniqueType
298 // );
299 // }
300 //
301 #define WDF_TYPE_INIT_BASE_SECTION_NAME ".kmdftypeinit"
302 #define WDF_TYPE_INIT_SECTION_NAME ".kmdftypeinit$b"
303 
304 //
305 // .data is the default section that global data would be placed into. We
306 // cannot just use ".data" in __declspec(allocate()) without first declaring
307 // it in a #pragma section() even though it is a default section name.
308 //
309 #ifndef WDF_TYPE_DEFAULT_SECTION_NAME
310 #define WDF_TYPE_DEFAULT_SECTION_NAME ".data"
311 #endif // WDF_TYPE_DEFAULT_SECTION_NAME
312 
313 #pragma section(WDF_TYPE_INIT_SECTION_NAME, read, write)
314 #pragma section(WDF_TYPE_DEFAULT_SECTION_NAME)
315 
316 #define WDF_DECLARE_TYPE_AND_GLOBALS(_contexttype, _UniqueType, _GetUniqueType, _section)\
317  \
318 typedef _contexttype* WDF_TYPE_NAME_POINTER_TYPE(_contexttype); \
319  \
320 WDF_EXTERN_C \
321 DECLSPEC_SELECTANY \
322 const WDF_OBJECT_CONTEXT_TYPE_INFO \
323 WDF_TYPE_NAME_TO_TYPE_INFO(_contexttype) = \
324 { \
325  sizeof(WDF_OBJECT_CONTEXT_TYPE_INFO), \
326  #_contexttype, \
327  sizeof(_contexttype), \
328  _UniqueType, \
329  _GetUniqueType, \
330 }; \
331 //__declspec(allocate(_section))
332 
333 #define WDF_DECLARE_CASTING_FUNCTION(_contexttype, _castingfunction) \
334  \
335 WDF_EXTERN_C \
336 __drv_aliasesMem \
337 FORCEINLINE \
338 WDF_TYPE_NAME_POINTER_TYPE(_contexttype) \
339 _castingfunction( \
340  _In_ WDFOBJECT Handle \
341  ) \
342 { \
343  return (WDF_TYPE_NAME_POINTER_TYPE(_contexttype)) \
344  WdfObjectGetTypedContextWorker( \
345  Handle, \
346  WDF_GET_CONTEXT_TYPE_INFO(_contexttype)->UniqueType \
347  ); \
348 }
349 
350 #define WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(_contexttype, _castingfunction) \
351  \
352 WDF_DECLARE_TYPE_AND_GLOBALS( \
353  _contexttype, \
354  WDF_GET_CONTEXT_TYPE_INFO(_contexttype), \
355  NULL, \
356  WDF_TYPE_DEFAULT_SECTION_NAME) \
357  \
358 WDF_DECLARE_CASTING_FUNCTION(_contexttype, _castingfunction)
359 
360 //
361 // WDF_DECLARE_SHARED_CONTEXT_TYPE_WITH_NAME is the same as
362 // WDF_DECLARE_CONTEXT_TYPE_WITH_NAME with respect to the types and structures
363 // that are created and initialized. The casting function is different in that
364 // it passes the UniqueType to WdfObjectGetTypedContextWorker() instead of the
365 // global type structure created. It also creates a structure which will contain
366 // an initialization function which will be invoked before DriverEntry() is
367 // called.
368 //
369 // It is the responsibilty of the component exporting the unique type to define
370 // and implement the function which will return the unique type. The format of
371 // the define is:
372 //
373 // #define _contexttype ## _EXTERNAL_INIT_FUNCTION
374 //
375 // (e.g. #define DEVICE_CONTEXT_EXTERNALINIT_FUNCTION DeviceContextInit()
376 // for a type of DEVICE_CONTEXT)
377 //
378 #define WDF_DECLARE_SHARED_CONTEXT_TYPE_WITH_NAME(_contexttype, _castingfunction) \
379  \
380 WDF_DECLARE_TYPE_AND_GLOBALS( \
381  _contexttype, \
382  NULL, \
383  WDF_TYPE_NAME_TO_EXTERNAL_INIT_FUNCTION(_contexttype), \
384  WDF_TYPE_INIT_SECTION_NAME) \
385  \
386 WDF_DECLARE_CASTING_FUNCTION(_contexttype, _castingfunction)
387 
388 
389 //
390 // Generic conversion macro from handle to type. This should be used if the
391 // autogenerated conversion function does not suite the programmers calling style.
392 //
393 // The type parameter should be name of the type (e.g. DEVICE_CONTEXT), not the
394 // name of the pointer to the type (PDEVICE_CONTEXT).
395 //
396 // Example call:
397 //
398 // WDFDEVICE device;
399 // PDEVICE_CONTEXT pContext;
400 //
401 // pContext = WdfObjectGetTypedContext(device, DEVICE_CONTEXT);
402 //
403 //
404 #define WdfObjectGetTypedContext(handle, type) \
405 (type*) \
406 WdfObjectGetTypedContextWorker( \
407  (WDFOBJECT) handle, \
408  WDF_GET_CONTEXT_TYPE_INFO(type)->UniqueType \
409  )
410 
411 //
412 // Converts a type name to a unique context name.
413 //
414 #define WDF_CUSTOM_TYPE_CONTEXT_NAME(_type) \
415  WdfCustomType_ ## _type
416 
417 //
418 // Converts a type name to a unique function name to retrieve the type info context.
419 //
420 #define WDF_GET_CUSTOM_TYPE_FUNCTION_NAME(_type) \
421  WdfObjectGetCustomType_ ## _type
422 
423 //
424 // Converts a type name to a unique function name to add the type info context.
425 //
426 #define WDF_ADD_CUSTOM_TYPE_FUNCTION_NAME(_type) \
427  WdfObjectAddCustomType_ ## _type
428 
429 //
430 // Core structure for supporting custom types, see macros below.
431 //
432 typedef struct _WDF_CUSTOM_TYPE_CONTEXT {
436 
437 //
438 // Declares a context and a function to handle the specified type.
439 //
440 // NOTE: Do not put a ; at the end of the last line. This will require the
441 // caller to specify a ; after the call.
442 //
443 #define WDF_DECLARE_CUSTOM_TYPE(_type) \
444  \
445 typedef WDF_CUSTOM_TYPE_CONTEXT WDF_CUSTOM_TYPE_CONTEXT_NAME(_type); \
446  \
447 WDF_DECLARE_CONTEXT_TYPE_WITH_NAME( \
448  WDF_CUSTOM_TYPE_CONTEXT_NAME(_type), \
449  WDF_GET_CUSTOM_TYPE_FUNCTION_NAME(_type) \
450  ); \
451  \
452 WDF_EXTERN_C \
453 FORCEINLINE \
454 NTSTATUS \
455 WDF_ADD_CUSTOM_TYPE_FUNCTION_NAME(_type)( \
456  _In_ WDFOBJECT Handle, \
457  _In_opt_ ULONG_PTR Data, \
458  _In_opt_ PFN_WDF_OBJECT_CONTEXT_CLEANUP EvtCleanupCallback, \
459  _In_opt_ PFN_WDF_OBJECT_CONTEXT_DESTROY EvtDestroyCallback \
460  ) \
461 { \
462  NTSTATUS status; \
463  WDF_OBJECT_ATTRIBUTES attributes; \
464  WDF_CUSTOM_TYPE_CONTEXT_NAME(_type)* typeInfo; \
465  \
466  WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE( \
467  &attributes, \
468  WDF_CUSTOM_TYPE_CONTEXT_NAME(_type)); \
469  \
470  attributes.EvtCleanupCallback = EvtCleanupCallback; \
471  attributes.EvtDestroyCallback = EvtDestroyCallback; \
472  \
473  status = WdfObjectAllocateContext(Handle, \
474  &attributes, \
475  (PVOID*)&typeInfo); \
476  if (NT_SUCCESS(status)) { \
477  typeInfo->Size = sizeof(WDF_CUSTOM_TYPE_CONTEXT_NAME(_type)); \
478  typeInfo->Data = Data; \
479  } \
480  \
481  return status; \
482 }
483 
484 //
485 // BOOLEAN
486 // WdfObjectIsCustomType(
487 // _In_ _handle, // WDFOBJECT handle.
488 // _In_ _type // Type.
489 // )
490 //
491 // NOTE: Do not put a ; at the end of the last line. This will require the
492 // caller to specify a ; after the call.
493 //
494 #define WdfObjectIsCustomType(_handle, _type) \
495  (WdfObjectGetTypedContext(_handle, WDF_CUSTOM_TYPE_CONTEXT_NAME(_type)) \
496  == NULL ? FALSE : TRUE)
497 
498 //
499 // NTSTATUS
500 // WdfObjectAddCustomTypeWithData(
501 // _In_ _handle, // WDFOBJECT handle.
502 // _In_ _type, // Type.
503 // _In_opt_ _data, // Type's data.
504 // _In_opt_ _cleanup, // EvtCleanupCallback
505 // _In_opt_ _destroy // EvtDestroyCallback
506 // )
507 //
508 // NOTE: Do not put a ; at the end of the last line. This will require the
509 // caller to specify a ; after the call.
510 //
511 #define WdfObjectAddCustomTypeWithData(_handle, _type, _data, _cleanup, _destroy) \
512  WDF_ADD_CUSTOM_TYPE_FUNCTION_NAME(_type)(_handle, _data, _cleanup, _destroy)
513 
514 //
515 // NTSTATUS
516 // WdfObjectAddCustomType(
517 // _In_ _handle, // WDFOBJECT handle.
518 // _In_ _type // Type.
519 // )
520 //
521 // NOTE: Do not put a ; at the end of the last line. This will require the
522 // caller to specify a ; after the call.
523 //
524 #define WdfObjectAddCustomType(_handle, _type) \
525  WdfObjectAddCustomTypeWithData(_handle, _type, 0, NULL, NULL)
526 
527 //
528 // ULONG_PTR
529 // WdfObjectGetCustomTypeData(
530 // _In_ _handle, // WDFOBJECT handle.
531 // _In_ _type // Type.
532 // )
533 //
534 // NOTE: Do not put a ; at the end of the last line. This will require the
535 // caller to specify a ; after the call.
536 //
537 #define WdfObjectGetCustomTypeData(_handle, _type) \
538  (WDF_GET_CUSTOM_TYPE_FUNCTION_NAME(_type)(_handle)->Data)
539 
540 
541 //
542 // WDF Function: WdfObjectGetTypedContextWorker
543 //
544 typedef
545 WDFAPI
546 PVOID
548  _In_
550  _In_
552  _In_
554  );
555 
557 PVOID
559  _In_
561  _In_
563  )
564 {
566 }
567 
568 //
569 // WDF Function: WdfObjectAllocateContext
570 //
571 typedef
572 WDFAPI
573 NTSTATUS
575  _In_
577  _In_
579  _In_
580  PWDF_OBJECT_ATTRIBUTES ContextAttributes,
582  PVOID* Context
583  );
584 
586 NTSTATUS
588  _In_
590  _In_
591  PWDF_OBJECT_ATTRIBUTES ContextAttributes,
593  PVOID* Context
594  )
595 {
597 }
598 
599 //
600 // WDF Function: WdfObjectContextGetObject
601 //
602 typedef
603 WDFAPI
604 WDFOBJECT
606  _In_
608  _In_
610  );
611 
613 WDFOBJECT
615  _In_
617  )
618 {
620 }
621 
622 //
623 // WDF Function: WdfObjectReferenceActual
624 //
625 typedef
626 WDFAPI
627 VOID
629  _In_
631  _In_
633  _In_opt_
634  PVOID Tag,
635  _In_
636  LONG Line,
637  _In_z_
638  PCHAR File
639  );
640 
642 VOID
644  _In_
646  _In_opt_
647  PVOID Tag,
648  _In_
649  LONG Line,
650  _In_z_
651  PCHAR File
652  )
653 {
655 }
656 
657 //
658 // WDF Function: WdfObjectDereferenceActual
659 //
660 typedef
661 WDFAPI
662 VOID
664  _In_
666  _In_
668  _In_opt_
669  PVOID Tag,
670  _In_
671  LONG Line,
672  _In_z_
673  PCHAR File
674  );
675 
677 VOID
679  _In_
681  _In_opt_
682  PVOID Tag,
683  _In_
684  LONG Line,
685  _In_z_
686  PCHAR File
687  )
688 {
690 }
691 
692 //
693 // WDF Function: WdfObjectCreate
694 //
695 typedef
698 WDFAPI
699 NTSTATUS
700 (STDCALL *PFN_WDFOBJECTCREATE)(
701  _In_
703  _In_opt_
705  _Out_
707  );
708 
712 NTSTATUS
713 WdfObjectCreate(
714  _In_opt_
716  _Out_
718  )
719 {
720  return ((PFN_WDFOBJECTCREATE) WdfFunctions[WdfObjectCreateTableIndex])(WdfDriverGlobals, Attributes, Object);
721 }
722 
723 //
724 // WDF Function: WdfObjectDelete
725 //
726 typedef
728 WDFAPI
729 VOID
730 (STDCALL *PFN_WDFOBJECTDELETE)(
731  _In_
733  _In_
735  );
736 
739 VOID
740 WdfObjectDelete(
741  _In_
743  )
744 {
746 }
747 
748 //
749 // WDF Function: WdfObjectQuery
750 //
751 typedef
754 WDFAPI
755 NTSTATUS
756 (STDCALL *PFN_WDFOBJECTQUERY)(
757  _In_
759  _In_
761  _In_
762  CONST GUID* Guid,
763  _In_
766  PVOID QueryBuffer
767  );
768 
772 NTSTATUS
773 WdfObjectQuery(
774  _In_
776  _In_
777  CONST GUID* Guid,
778  _In_
781  PVOID QueryBuffer
782  )
783 {
784  return ((PFN_WDFOBJECTQUERY) WdfFunctions[WdfObjectQueryTableIndex])(WdfDriverGlobals, Object, Guid, QueryBufferLength, QueryBuffer);
785 }
786 
787 
788 
789 //
790 // Reference an object
791 //
792 // VOID
793 // WdfObjectReference(
794 // _In_ WDFOBJECT Handle
795 // );
796 //
797 // VOID
798 // WdfObjectReferenceWithTag(
799 // _In_ WDFOBJECT Handle,
800 // _In_ PVOID Tag
801 // );
802 //
803 #define WdfObjectReference(Handle) \
804  WdfObjectReferenceWithTag(Handle, NULL)
805 
806 #define WdfObjectReferenceWithTag(Handle, Tag) \
807  WdfObjectReferenceActual(Handle, Tag, __LINE__, __FILE__)
808 
809 
810 //
811 // Dereference an object. If an object allows for a client explicitly deleting
812 // it, call WdfObjectDelete. Do not use WdfObjectDereferenceXxx to delete an
813 // object.
814 //
815 // VOID
816 // WdfObjectDereference(
817 // _In_ WDFOBJECT Handle
818 // );
819 //
820 // VOID
821 // WdfObjectDereferenceWithTag(
822 // _In_ WDFOBJECT Handle
823 // _In_ PVOID Tag
824 // );
825 //
826 #define WdfObjectDereference(Handle) \
827  WdfObjectDereferenceWithTag(Handle, NULL)
828 
829 #define WdfObjectDereferenceWithTag(Handle, Tag) \
830  WdfObjectDereferenceActual(Handle, Tag, __LINE__, __FILE__)
831 
832 
833 #endif // (NTDDI_VERSION >= NTDDI_WIN2K)
834 
835 
837 
838 #endif // _WDFOBJECT_H_
839 
signed char * PCHAR
Definition: retypes.h:7
WDFAPI VOID(STDCALL * PFN_WDFOBJECTREFERENCEACTUAL)(_In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFOBJECT Handle, _In_opt_ PVOID Tag, _In_ LONG Line, _In_z_ PCHAR File)
Definition: wdfobject.h:628
#define _Must_inspect_result_
Definition: no_sal2.h:62
__in WDFOBJECT __in PCWDF_OBJECT_CONTEXT_TYPE_INFO TypeInfo
Definition: handleapi.cpp:601
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID _In_ ULONG _Out_writes_bytes_(QueryBufferLength) PVOID QueryBuffer)
Definition: wdfobject.h:765
#define WDF_EXTERN_C_END
Definition: wdfobject.h:37
_WDF_SYNCHRONIZATION_SCOPE
Definition: wdfobject.h:61
const struct _WDF_OBJECT_CONTEXT_TYPE_INFO * PCWDF_OBJECT_CONTEXT_TYPE_INFO
Definition: wdfobject.h:98
#define __cdecl
Definition: accygwin.h:79
_WDF_EXECUTION_LEVEL
Definition: wdfobject.h:51
__in PVOID ContextPointer
Definition: handleapi.cpp:679
LONG NTSTATUS
Definition: precomp.h:26
WDFAPI WDFOBJECT(FASTCALL * PFN_WDFOBJECTCONTEXTGETOBJECT)(_In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ PVOID ContextPointer)
Definition: wdfobject.h:605
PFN_GET_UNIQUE_CONTEXT_TYPE EvtDriverGetUniqueContextType
Definition: wdfobject.h:214
DriverGlobals
#define FASTCALL
Definition: nt_native.h:50
WDFAPI VOID(STDCALL * PFN_WDFOBJECTDEREFERENCEACTUAL)(_In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFOBJECT Handle, _In_opt_ PVOID Tag, _In_ LONG Line, _In_z_ PCHAR File)
Definition: wdfobject.h:663
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID _In_ ULONG QueryBufferLength
Definition: wdfobject.h:760
#define _In_opt_
Definition: no_sal2.h:212
#define WdfFunctions
Definition: wdf.h:66
uint32_t ULONG_PTR
Definition: typedefs.h:65
WDF_EXECUTION_LEVEL ExecutionLevel
Definition: wdfobject.h:120
WDFAPI NTSTATUS(STDCALL * PFN_WDFOBJECTALLOCATECONTEXT)(_In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFOBJECT Handle, _In_ PWDF_OBJECT_ATTRIBUTES ContextAttributes, _Outptr_opt_ PVOID *Context)
Definition: wdfobject.h:574
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFOBJECT * Object
Definition: wdfobject.h:704
struct Line Line
Definition: wdfdevice.h:4081
long LONG
Definition: pedump.c:60
struct _WDF_CUSTOM_TYPE_CONTEXT WDF_CUSTOM_TYPE_CONTEXT
#define WDFAPI
Definition: wdftypes.h:53
#define _Out_
Definition: no_sal2.h:160
#define _IRQL_requires_same_
Definition: driverspecs.h:215
_Must_inspect_result_ _IRQL_requires_max_(DISPATCH_LEVEL) WDFAPI NTSTATUS(STDCALL *PFN_WDFOBJECTCREATE)(_In_ PWDF_DRIVER_GLOBALS DriverGlobals
Definition: wdfobject.h:697
void * PVOID
Definition: retypes.h:9
struct _WDF_OBJECT_CONTEXT_TYPE_INFO WDF_OBJECT_CONTEXT_TYPE_INFO
enum _WDF_SYNCHRONIZATION_SCOPE WDF_SYNCHRONIZATION_SCOPE
PWDF_DRIVER_GLOBALS WdfDriverGlobals
#define STDCALL
Definition: wdf.h:45
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID * Guid
Definition: wdfobject.h:760
FORCEINLINE WDFOBJECT WdfObjectContextGetObject(_In_ PVOID ContextPointer)
Definition: wdfobject.h:614
Definition: ncftp.h:79
EVT_WDF_OBJECT_CONTEXT_DESTROY * PFN_WDF_OBJECT_CONTEXT_DESTROY
Definition: wdfobject.h:95
FORCEINLINE PVOID WdfObjectGetTypedContextWorker(_In_ WDFOBJECT Handle, _In_ PCWDF_OBJECT_CONTEXT_TYPE_INFO TypeInfo)
Definition: wdfobject.h:558
EVT_WDF_OBJECT_CONTEXT_CLEANUP * PFN_WDF_OBJECT_CONTEXT_CLEANUP
Definition: wdfobject.h:82
#define NTSTATUS
Definition: precomp.h:20
FORCEINLINE NTSTATUS WdfObjectAllocateContext(_In_ WDFOBJECT Handle, _In_ PWDF_OBJECT_ATTRIBUTES ContextAttributes, _Outptr_opt_ PVOID *Context)
Definition: wdfobject.h:587
#define VOID
Definition: acefi.h:82
#define _Outptr_opt_
Definition: no_sal2.h:264
typedef _Function_class_(EVT_WDF_OBJECT_CONTEXT_CLEANUP) _IRQL_requires_same_ _IRQL_requires_max_(DISPATCH_LEVEL) VOID STDCALL EVT_WDF_OBJECT_CONTEXT_CLEANUP(_In_ WDFOBJECT Object)
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
Definition: wdfdevice.h:4061
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
#define _In_
Definition: no_sal2.h:158
FORCEINLINE VOID WDF_OBJECT_ATTRIBUTES_INIT(_Out_ PWDF_OBJECT_ATTRIBUTES Attributes)
Definition: wdfobject.h:147
_Must_inspect_result_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
Definition: wdfobject.h:704
FORCEINLINE VOID WdfObjectReferenceActual(_In_ WDFOBJECT Handle, _In_opt_ PVOID Tag, _In_ LONG Line, _In_z_ PCHAR File)
Definition: wdfobject.h:643
PCWDF_OBJECT_CONTEXT_TYPE_INFO ContextTypeInfo
Definition: wdfobject.h:141
struct _WDF_OBJECT_CONTEXT_TYPE_INFO * PWDF_OBJECT_CONTEXT_TYPE_INFO
PFN_WDF_OBJECT_CONTEXT_CLEANUP EvtCleanupCallback
Definition: wdfobject.h:109
#define _In_z_
Definition: no_sal2.h:164
#define FORCEINLINE
Definition: wdftypes.h:67
WDFOBJECT ParentObject
Definition: wdfobject.h:130
struct _WDF_OBJECT_ATTRIBUTES WDF_OBJECT_ATTRIBUTES
HANDLE WDFOBJECT
Definition: wdftypes.h:114
_In_ HANDLE Handle
Definition: extypes.h:390
struct tagContext Context
Definition: acpixf.h:1034
unsigned int ULONG
Definition: retypes.h:1
WDF_EXTERN_C_START enum _WDF_EXECUTION_LEVEL WDF_EXECUTION_LEVEL
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
struct _WDF_CUSTOM_TYPE_CONTEXT * PWDF_CUSTOM_TYPE_CONTEXT
WDF_SYNCHRONIZATION_SCOPE SynchronizationScope
Definition: wdfobject.h:125
#define WDF_EXTERN_C_START
Definition: wdfobject.h:36
Definition: File.h:15
PCWDF_OBJECT_CONTEXT_TYPE_INFO(__cdecl * PFN_GET_UNIQUE_CONTEXT_TYPE)(VOID)
Definition: wdfobject.h:176
WDFAPI PVOID(FASTCALL * PFN_WDFOBJECTGETTYPEDCONTEXTWORKER)(_In_ PWDF_DRIVER_GLOBALS DriverGlobals, _In_ WDFOBJECT Handle, _In_ PCWDF_OBJECT_CONTEXT_TYPE_INFO TypeInfo)
Definition: wdfobject.h:547
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID _In_ LONG _In_z_ PCHAR File
Definition: wdfdevice.h:4061
FORCEINLINE VOID WdfObjectDereferenceActual(_In_ WDFOBJECT Handle, _In_opt_ PVOID Tag, _In_ LONG Line, _In_z_ PCHAR File)
Definition: wdfobject.h:678
#define CONST
Definition: pedump.c:81
PCWDF_OBJECT_CONTEXT_TYPE_INFO UniqueType
Definition: wdfobject.h:206
PFN_WDF_OBJECT_CONTEXT_DESTROY EvtDestroyCallback
Definition: wdfobject.h:115
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
struct _WDF_OBJECT_ATTRIBUTES * PWDF_OBJECT_ATTRIBUTES