ReactOS 0.4.16-dev-1946-g52006dd
ObType.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS kernel-mode tests
3 * LICENSE: LGPLv2+ - See COPYING.LIB in the top level directory
4 * PURPOSE: Kernel-Mode Test Suite Ob Regressions KM-Test
5 * PROGRAMMER: Aleksey Bragin <aleksey@reactos.org>
6 * Thomas Faber <thomas.faber@reactos.org>
7 */
8
9/* TODO: split this into multiple tests! ObLife, ObHandle, ObName, ... */
10
11#include <kmt_test.h>
12
13#define NDEBUG
14#include <debug.h>
15
16#define CheckObject(Handle, Pointers, Handles) do \
17{ \
18 PUBLIC_OBJECT_BASIC_INFORMATION ObjectInfo; \
19 Status = ZwQueryObject(Handle, ObjectBasicInformation, \
20 &ObjectInfo, sizeof ObjectInfo, NULL); \
21 ok_eq_hex(Status, STATUS_SUCCESS); \
22 ok_eq_ulong(ObjectInfo.PointerCount, Pointers); \
23 ok_eq_ulong(ObjectInfo.HandleCount, Handles); \
24} while (0)
25
26#define NUM_OBTYPES 5
27
28typedef struct _MY_OBJECT1
29{
32
33typedef struct _MY_OBJECT2
34{
38
49
50typedef struct _COUNTS
51{
61
62static
63VOID
67 IN POB_DUMP_CONTROL DumpControl)
68{
69 DPRINT("DumpProc() called\n");
70 ++Counts.Dump;
71}
72
73static
77 IN OB_OPEN_REASON OpenReason,
81 IN ULONG HandleCount)
82{
83 DPRINT("OpenProc() 0x%p, OpenReason %d, HandleCount %lu, AccessMask 0x%lX\n",
84 Object, OpenReason, HandleCount, GrantedAccess);
85 ++Counts.Open;
86 return STATUS_SUCCESS;
87}
88
89static
90VOID
97 IN ULONG SystemHandleCount)
98{
99 DPRINT("CloseProc() 0x%p, ProcessHandleCount %lu, SystemHandleCount %lu, AccessMask 0x%lX\n",
100 Object, ProcessHandleCount, SystemHandleCount, GrantedAccess);
101 ++Counts.Close;
102}
103
104static
105VOID
106NTAPI
109{
110 DPRINT("DeleteProc() 0x%p\n", Object);
111 ++Counts.Delete;
112}
113
114static
116NTAPI
118 IN PVOID ParseObject,
123 IN OUT PUNICODE_STRING CompleteName,
128{
129 DPRINT("ParseProc() called\n");
130 *Object = NULL;
131
132 ++Counts.Parse;
133 return STATUS_OBJECT_NAME_NOT_FOUND;//STATUS_SUCCESS;
134}
135
136static
138NTAPI
144{
145 DPRINT("OkayToCloseProc() 0x%p, Handle 0x%p, AccessMask 0x%lX\n",
148 return TRUE;
149}
150
151static
153NTAPI
156 IN BOOLEAN HasObjectName,
157 OUT POBJECT_NAME_INFORMATION ObjectNameInfo,
161{
162 DPRINT("QueryNameProc() 0x%p, HasObjectName %d, Len %lu, AccessMask 0x%lX\n",
163 Object, HasObjectName, Length, AccessMode);
165
166 ObjectNameInfo = NULL;
167 ReturnLength = 0;
169}
170
171static
174{
175 INT i;
177 struct
178 {
179 WCHAR DirectoryName[sizeof "\\ObjectTypes\\" - 1];
180 WCHAR TypeName[15];
181 } Name;
183 HANDLE ObjectTypeHandle;
184 UNICODE_STRING ObjectPath;
185
186 if (skip(GetNTVersion() < _WIN32_WINNT_VISTA, "Custom object types are not supported on Vista+.\n"))
188
189 RtlCopyMemory(&Name.DirectoryName, L"\\ObjectTypes\\", sizeof Name.DirectoryName);
190
191 for (i = 0; i < NUM_OBTYPES; ++i)
192 {
193 Status = RtlStringCbPrintfW(Name.TypeName, sizeof Name.TypeName, L"MyObjectType%x", i);
196 DPRINT("Creating object type %wZ\n", &ObTypeName[i]);
197
203
204 // Test for invalid parameter
205 // FIXME: Make it more exact, to see which params Win2k3 checks
206 // existence of
209
217 //ObTypeInitializer[i].SecurityProcedure = SecurityProc;
218
221 {
222 /* as we cannot delete the object types, get a pointer if they
223 * already exist */
224 RtlInitUnicodeString(&ObjectPath, Name.DirectoryName);
226 Status = ObOpenObjectByName(&ObjectAttributes, NULL, KernelMode, NULL, 0, NULL, &ObjectTypeHandle);
228 ok(ObjectTypeHandle != NULL, "ObjectTypeHandle = NULL\n");
229 if (!skip(Status == STATUS_SUCCESS && ObjectTypeHandle, "No handle\n"))
230 {
231 Status = ObReferenceObjectByHandle(ObjectTypeHandle, 0, NULL, KernelMode, (PVOID)&ObTypes[i], NULL);
233 if (!skip(Status == STATUS_SUCCESS && ObTypes[i], "blah\n"))
234 {
242 }
243 Status = ZwClose(ObjectTypeHandle);
244 }
245 }
246
248 ok(ObTypes[i] != NULL, "ObType = NULL\n");
249 }
250
251 return STATUS_SUCCESS;
252}
253
254static
255VOID
257{
259
260 RtlInitUnicodeString(&ObDirectoryName, L"\\ObtDirectory");
265}
266
267#define CheckCounts(OpenCount, CloseCount, DeleteCount, ParseCount, \
268 OkayToCloseCount, QueryNameCount) do \
269{ \
270 ok_eq_uint(Counts.Open, OpenCount); \
271 ok_eq_uint(Counts.Close, CloseCount); \
272 ok_eq_uint(Counts.Delete, DeleteCount); \
273 ok_eq_uint(Counts.Parse, ParseCount); \
274 ok_eq_uint(Counts.OkayToClose, OkayToCloseCount); \
275 ok_eq_uint(Counts.QueryName, QueryNameCount); \
276} while (0)
277
278#define SaveCounts(Save) memcpy(&Save, &Counts, sizeof Counts)
279
280/* TODO: make this the same as NUM_OBTYPES */
281#define NUM_OBTYPES2 2
282static
283VOID
285{
289 INT i;
291 ULONG ObjectSize[NUM_OBTYPES2] = { sizeof(MY_OBJECT1), sizeof(MY_OBJECT2) };
292
293 // Create two objects
294 for (i = 0; i < NUM_OBTYPES2; ++i)
295 {
296 ASSERT(sizeof Name[i] == MAX_PATH * sizeof(WCHAR));
297 Status = RtlStringCbPrintfW(Name[i], sizeof Name[i], L"\\ObtDirectory\\MyObject%d", i + 1);
301 }
303
304 for (i = 0; i < NUM_OBTYPES2; ++i)
305 {
308 }
309
311
312 // Insert them
313 for (i = 0; i < NUM_OBTYPES2; ++i)
314 {
316 Status = ObInsertObject(ObBody[i], NULL, Access[i], 0, &ObBody[i], &ObHandle1[i]);
318 ok(ObBody[i] != NULL, "Object body = NULL\n");
319 ok(ObHandle1[i] != NULL, "Handle = NULL\n");
320 CheckObject(ObHandle1[i], 3LU, 1LU);
321 CheckCounts(SaveCounts.Open + 1, SaveCounts.Close, SaveCounts.Delete, SaveCounts.Parse, SaveCounts.OkayToClose, SaveCounts.QueryName);
324 }
325
326 //DPRINT1("%d %d %d %d %d %d %d\n", DumpCount, OpenCount, CloseCount, DeleteCount, ParseCount, OkayToCloseCount, QueryNameCount);
327 CheckCounts(SaveCounts.Open, SaveCounts.Close, SaveCounts.Delete, SaveCounts.Parse, SaveCounts.OkayToClose, SaveCounts.QueryName);
328}
329
330static
331VOID
333 BOOLEAN Clean,
334 BOOLEAN AlternativeMethod)
335{
337 LONG_PTR Ret;
338 PVOID TypeObject;
339 INT i;
340 UNICODE_STRING ObPathName[NUM_OBTYPES];
342
343 // Close what we have opened and free what we allocated
344 for (i = 0; i < NUM_OBTYPES2; ++i)
345 {
346 if (!skip(ObBody[i] != NULL, "Nothing to dereference\n"))
347 {
348 if (ObHandle1[i]) CheckObject(ObHandle1[i], 3LU, 1LU);
349 Ret = ObReferenceObject(ObBody[i]);
350 if (ObHandle1[i]) CheckObject(ObHandle1[i], 4LU, 1LU);
352 ok_eq_longptr(Ret, (LONG_PTR)2);
353 if (ObHandle1[i]) CheckObject(ObHandle1[i], 3LU, 1LU);
354 ObBody[i] = NULL;
355 }
356 if (!skip(ObHandle1[i] != NULL, "Nothing to close\n"))
357 {
360 ObHandle1[i] = NULL;
361 }
362 }
363
364 if (skip(Clean, "Not cleaning up, as requested. Use ObTypeClean to clean up\n"))
365 return;
366
367 // Now we have to get rid of a directory object
368 // Since it is permanent, we have to firstly make it temporary
369 // and only then kill
370 // (this procedure is described in DDK)
371 if (!skip(DirectoryHandle != NULL, "No directory handle\n"))
372 {
374
378
381 }
382
383 /* we don't delete the object types we created. It makes Windows unstable.
384 * TODO: perhaps make it work in ROS anyway */
385 return;
386 if (!AlternativeMethod)
387 {
388 for (i = 0; i < NUM_OBTYPES; ++i)
389 if (!skip(ObTypes[i] != NULL, "No object type to delete\n"))
390 {
392 ok_eq_longptr(Ret, (LONG_PTR)0);
393 ObTypes[i] = NULL;
394 }
395 }
396 else
397 {
398 for (i = 0; i < NUM_OBTYPES; ++i)
399 {
400 if (!skip(ObTypes[i] != NULL, "No object type to delete\n"))
401 {
402 Status = RtlStringCbPrintfW(Name, sizeof Name, L"\\ObjectTypes\\MyObjectType%d", i);
403 RtlInitUnicodeString(&ObPathName[i], Name);
404 Status = ObReferenceObjectByName(&ObPathName[i], OBJ_CASE_INSENSITIVE, NULL, 0L, NULL, KernelMode, NULL, &TypeObject);
405
406 Ret = ObDereferenceObject(TypeObject);
407 ok_eq_longptr(Ret, (LONG_PTR)2);
408 Ret = ObDereferenceObject(TypeObject);
409 ok_eq_longptr(Ret, (LONG_PTR)1);
410 DPRINT("Reference Name %wZ = %p, ObTypes[%d] = %p\n",
411 ObPathName[i], TypeObject, i, ObTypes[i]);
412 ObTypes[i] = NULL;
413 }
414 }
415 }
416}
417
418static
419VOID
421 IN BOOLEAN Clean)
422{
424
425 RtlZeroMemory(&Counts, sizeof Counts);
426
428 DPRINT("ObtCreateObjectTypes() %s\n", NT_SUCCESS(Status) ? "succeeded" : "failed");
429
431 DPRINT("ObtCreateDirectory() done\n");
432
433 if (!skip(ObTypes[0] != NULL, "No object types!\n"))
435 DPRINT("ObtCreateObjects() done\n");
436
437 ObtClose(Clean, FALSE);
438}
439
441{
443}
444
445/* run this to see the objects created in user mode */
446START_TEST(ObTypeNoClean)
447{
449}
450
451/* run this to clean up after ObTypeNoClean */
452START_TEST(ObTypeClean)
453{
455}
_In_ PVOID _In_ ULONG _Out_ PVOID _In_ ULONG _Inout_ PULONG ReturnLength
#define NUM_OBTYPES2
Definition: ObType.c:281
static VOID ObtCreateDirectory(VOID)
Definition: ObType.c:256
static OBJECT_ATTRIBUTES ObDirectoryAttributes
Definition: ObType.c:44
static UNICODE_STRING ObDirectoryName
Definition: ObType.c:43
#define CheckCounts(OpenCount, CloseCount, DeleteCount, ParseCount, OkayToCloseCount, QueryNameCount)
Definition: ObType.c:267
#define SaveCounts(Save)
Definition: ObType.c:278
static OBJECT_TYPE_INITIALIZER ObTypeInitializer[NUM_OBTYPES]
Definition: ObType.c:42
struct _MY_OBJECT2 * PMY_OBJECT2
static HANDLE ObHandle1[NUM_OBTYPES]
Definition: ObType.c:47
static VOID TestObjectType(IN BOOLEAN Clean)
Definition: ObType.c:420
struct _COUNTS * PCOUNTS
struct _MY_OBJECT2 MY_OBJECT2
static VOID NTAPI CloseProc(IN PEPROCESS Process, IN PVOID Object, IN ACCESS_MASK GrantedAccess, IN ULONG ProcessHandleCount, IN ULONG SystemHandleCount)
Definition: ObType.c:92
static NTSTATUS ObtCreateObjectTypes(VOID)
Definition: ObType.c:173
#define CheckObject(Handle, Pointers, Handles)
Definition: ObType.c:16
static NTSTATUS NTAPI ParseProc(IN PVOID ParseObject, IN PVOID ObjectType, IN OUT PACCESS_STATE AccessState, IN KPROCESSOR_MODE AccessMode, IN ULONG Attributes, IN OUT PUNICODE_STRING CompleteName, IN OUT PUNICODE_STRING RemainingName, IN OUT PVOID Context OPTIONAL, IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL, OUT PVOID *Object)
Definition: ObType.c:117
struct _MY_OBJECT1 * PMY_OBJECT1
static COUNTS Counts
Definition: ObType.c:60
#define NUM_OBTYPES
Definition: ObType.c:26
static VOID ObtCreateObjects(VOID)
Definition: ObType.c:284
static PVOID ObBody[NUM_OBTYPES]
Definition: ObType.c:46
static NTSTATUS NTAPI QueryNameProc(IN PVOID Object, IN BOOLEAN HasObjectName, OUT POBJECT_NAME_INFORMATION ObjectNameInfo, IN ULONG Length, OUT PULONG ReturnLength, IN KPROCESSOR_MODE AccessMode)
Definition: ObType.c:154
static OBJECT_ATTRIBUTES ObAttributes[NUM_OBTYPES]
Definition: ObType.c:45
static VOID ObtClose(BOOLEAN Clean, BOOLEAN AlternativeMethod)
Definition: ObType.c:332
struct _COUNTS COUNTS
static UNICODE_STRING ObTypeName[NUM_OBTYPES]
Definition: ObType.c:40
static NTSTATUS NTAPI OpenProc(IN OB_OPEN_REASON OpenReason, IN PEPROCESS Process, IN PVOID Object, IN ACCESS_MASK GrantedAccess, IN ULONG HandleCount)
Definition: ObType.c:76
static HANDLE DirectoryHandle
Definition: ObType.c:48
static POBJECT_TYPE ObTypes[NUM_OBTYPES]
Definition: ObType.c:39
static UNICODE_STRING ObName[NUM_OBTYPES]
Definition: ObType.c:41
static VOID NTAPI DeleteProc(IN PVOID Object)
Definition: ObType.c:107
static VOID NTAPI DumpProc(IN PVOID Object, IN POB_DUMP_CONTROL DumpControl)
Definition: ObType.c:65
static BOOLEAN NTAPI OkayToCloseProc(IN PEPROCESS Process OPTIONAL, IN PVOID Object, IN HANDLE Handle, IN KPROCESSOR_MODE AccessMode)
Definition: ObType.c:139
struct _MY_OBJECT1 MY_OBJECT1
unsigned char BOOLEAN
#define ok_eq_hex(value, expected)
Definition: apitest.h:134
#define ok_eq_longptr(value, expected)
Definition: apitest.h:127
#define GetNTVersion()
Definition: apitest.h:17
#define ok(value,...)
Definition: atltest.h:57
#define skip(...)
Definition: atltest.h:64
#define START_TEST(x)
Definition: atltest.h:75
LONG NTSTATUS
Definition: precomp.h:26
#define U(x)
Definition: wordpad.c:45
_Inout_ PFCB _Inout_ PUNICODE_STRING RemainingName
Definition: cdprocs.h:802
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:36
#define STATUS_NOT_SUPPORTED
Definition: d3dkmdt.h:48
LPWSTR Name
Definition: desk.c:124
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define MAX_PATH
Definition: compat.h:34
#define L(x)
Definition: resources.c:13
#define NonPagedPool
Definition: env_spec_w32.h:307
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
Definition: fsrtlfuncs.h:223
ULONG Handle
Definition: gdb_input.c:15
Status
Definition: gdiplustypes.h:25
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define OBJ_KERNEL_HANDLE
Definition: winternl.h:231
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
#define OBJ_PERMANENT
Definition: winternl.h:226
@ ProcessHandleCount
Definition: winternl.h:1902
#define ASSERT(a)
Definition: mode.c:44
ObjectType
Definition: metafile.c:81
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define KernelMode
Definition: asm.h:38
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
NTSYSAPI NTSTATUS NTAPI ZwMakeTemporaryObject(_In_ HANDLE Handle)
NTSYSAPI NTSTATUS NTAPI ZwCreateDirectoryObject(_Out_ PHANDLE DirectoryHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes)
enum _OB_OPEN_REASON OB_OPEN_REASON
ULONG ACCESS_MASK
Definition: nt_native.h:40
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define STANDARD_RIGHTS_ALL
Definition: nt_native.h:69
#define OBJECT_TYPE_ALL_ACCESS
Definition: nt_native.h:1251
#define GENERIC_ALL
Definition: nt_native.h:92
#define DELETE
Definition: nt_native.h:57
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
NTSTRSAFEVAPI RtlStringCbPrintfW(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cbDest, _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,...)
Definition: ntstrsafe.h:1173
NTSTATUS NTAPI ObInsertObject(IN PVOID Object, IN PACCESS_STATE AccessState OPTIONAL, IN ACCESS_MASK DesiredAccess, IN ULONG ObjectPointerBias, OUT PVOID *NewObject OPTIONAL, OUT PHANDLE Handle)
Definition: obhandle.c:2935
NTSTATUS NTAPI ObOpenObjectByName(IN POBJECT_ATTRIBUTES ObjectAttributes, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, IN PACCESS_STATE PassedAccessState, IN ACCESS_MASK DesiredAccess, IN OUT PVOID ParseContext, OUT PHANDLE Handle)
Definition: obhandle.c:2532
NTSTATUS NTAPI ObCreateObject(IN KPROCESSOR_MODE ProbeMode OPTIONAL, IN POBJECT_TYPE Type, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN KPROCESSOR_MODE AccessMode, IN OUT PVOID ParseContext OPTIONAL, IN ULONG ObjectSize, IN ULONG PagedPoolCharge OPTIONAL, IN ULONG NonPagedPoolCharge OPTIONAL, OUT PVOID *Object)
Definition: oblife.c:1039
NTSTATUS NTAPI ObCreateObjectType(IN PUNICODE_STRING TypeName, IN POBJECT_TYPE_INITIALIZER ObjectTypeInitializer, IN PVOID Reserved, OUT POBJECT_TYPE *ObjectType)
Definition: oblife.c:1136
NTSTATUS NTAPI ObReferenceObjectByName(IN PUNICODE_STRING ObjectPath, IN ULONG Attributes, IN PACCESS_STATE PassedAccessState, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, IN OUT PVOID ParseContext, OUT PVOID *ObjectPtr)
Definition: obref.c:409
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
Definition: obref.c:494
unsigned short USHORT
Definition: pedump.c:61
#define _WIN32_WINNT_VISTA
Definition: sdkddkver.h:25
#define STATUS_SUCCESS
Definition: shellext.h:65
#define DPRINT
Definition: sndvol32.h:73
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
Definition: ObType.c:51
USHORT QueryName
Definition: ObType.c:58
USHORT Open
Definition: ObType.c:53
USHORT Dump
Definition: ObType.c:52
USHORT Delete
Definition: ObType.c:55
USHORT OkayToClose
Definition: ObType.c:57
USHORT Parse
Definition: ObType.c:56
USHORT Close
Definition: ObType.c:54
ULONG Something1
Definition: ObType.c:30
ULONG Something1
Definition: ObType.c:35
ULONG SomeLong[10]
Definition: ObType.c:36
OB_CLOSE_METHOD CloseProcedure
Definition: obtypes.h:368
OB_DELETE_METHOD DeleteProcedure
Definition: obtypes.h:369
OB_OPEN_METHOD OpenProcedure
Definition: obtypes.h:367
BOOLEAN MaintainHandleCount
Definition: obtypes.h:361
OB_QUERYNAME_METHOD QueryNameProcedure
Definition: obtypes.h:372
OB_PARSE_METHOD ParseProcedure
Definition: obtypes.h:370
OB_OKAYTOCLOSE_METHOD OkayToCloseProcedure
Definition: obtypes.h:373
OB_DUMP_METHOD DumpProcedure
Definition: obtypes.h:366
OBJECT_TYPE_INITIALIZER TypeInfo
Definition: obtypes.h:390
uint32_t * PULONG
Definition: typedefs.h:59
#define NTAPI
Definition: typedefs.h:36
int32_t INT
Definition: typedefs.h:58
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
#define STATUS_OBJECT_NAME_COLLISION
Definition: udferr_usr.h:150
#define STATUS_OBJECT_NAME_NOT_FOUND
Definition: udferr_usr.h:149
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
CCHAR KPROCESSOR_MODE
Definition: ketypes.h:7
_In_ PEPROCESS _In_ KPROCESSOR_MODE AccessMode
Definition: mmfuncs.h:396
#define ObDereferenceObject
Definition: obfuncs.h:203
#define ObReferenceObject
Definition: obfuncs.h:204
_In_opt_ PVOID _In_opt_ PUNICODE_STRING _In_ PSECURITY_DESCRIPTOR _In_ PACCESS_STATE AccessState
Definition: sefuncs.h:417
_In_ PSECURITY_SUBJECT_CONTEXT _In_ BOOLEAN _In_ ACCESS_MASK _In_ ACCESS_MASK _Outptr_opt_ PPRIVILEGE_SET _In_ PGENERIC_MAPPING _In_ KPROCESSOR_MODE _Out_ PACCESS_MASK GrantedAccess
Definition: sefuncs.h:20
__wchar_t WCHAR
Definition: xmlstorage.h:180