ReactOS  r76032
obinit.c
Go to the documentation of this file.
1 /*
2  * PROJECT: ReactOS Kernel
3  * LICENSE: GPL - See COPYING in the top level directory
4  * FILE: ntoskrnl/ob/obinit.c
5  * PURPOSE: Handles Object Manager Initialization and Shutdown
6  * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
7  * Eric Kohl
8  * Thomas Weidenmueller (w3seek@reactos.org)
9  */
10 
11 /* INCLUDES ******************************************************************/
12 
13 #include <ntoskrnl.h>
14 #define NDEBUG
15 #include <debug.h>
16 
17 /* GLOBALS *******************************************************************/
18 
20 {
24  0x000F0001
25 };
26 
28 {
36 };
37 
39 {
44 };
45 
48 
49 VOID
50 NTAPI
52 
54 
55 /* PRIVATE FUNCTIONS *********************************************************/
56 
57 static
59 NTAPI
62 {
64  PACL Dacl;
65  ULONG AclSize, SdSize;
67 
68  AclSize = sizeof(ACL) +
69  sizeof(ACE) + RtlLengthSid(SeWorldSid) +
70  sizeof(ACE) + RtlLengthSid(SeAliasAdminsSid) +
72 
73  SdSize = sizeof(SECURITY_DESCRIPTOR) + AclSize;
74 
75  /* Allocate the SD and ACL */
76  Sd = ExAllocatePoolWithTag(PagedPool, SdSize, TAG_SD);
77  if (Sd == NULL)
78  {
80  }
81 
82  /* Initialize the SD */
83  Status = RtlCreateSecurityDescriptor(Sd,
85  if (!NT_SUCCESS(Status))
86  goto done;
87 
88  Dacl = (PACL)((INT_PTR)Sd + sizeof(SECURITY_DESCRIPTOR));
89 
90  /* Initialize the DACL */
91  RtlCreateAcl(Dacl, AclSize, ACL_REVISION);
92 
93  /* Add the ACEs */
97  SeWorldSid);
98 
100  ACL_REVISION,
101  GENERIC_ALL,
103 
105  ACL_REVISION,
106  GENERIC_ALL,
108 
109  /* Attach the DACL to the SD */
110  Status = RtlSetDaclSecurityDescriptor(Sd,
111  TRUE,
112  Dacl,
113  FALSE);
114  if (!NT_SUCCESS(Status))
115  goto done;
116 
117  *SecurityDescriptor = Sd;
118 
119 done:
120  if (!NT_SUCCESS(Status))
121  {
122  if (Sd != NULL)
124  }
125 
126  return Status;
127 }
128 
129 BOOLEAN
131 NTAPI
133 {
134  CCHAR i;
135  PKPRCB Prcb;
136  PGENERAL_LOOKASIDE CurrentList = NULL;
137 
138  /* Now allocate the per-processor lists */
139  for (i = 0; i < KeNumberProcessors; i++)
140  {
141  /* Get the PRCB for this CPU */
142  Prcb = KiProcessorBlock[(int)i];
143 
144  /* Set the OBJECT_CREATE_INFORMATION List */
146  CurrentList = ExAllocatePoolWithTag(NonPagedPool,
147  sizeof(GENERAL_LOOKASIDE),
148  'ICbO');
149  if (CurrentList)
150  {
151  /* Initialize it */
153  NonPagedPool,
155  'ICbO',
156  32,
158  }
159  else
160  {
161  /* No list, use the static buffer */
162  CurrentList = &ObpCreateInfoLookasideList;
163  }
164 
165  /* Link it */
166  Prcb->PPLookasideList[LookasideCreateInfoList].P = CurrentList;
167 
168  /* Set the captured UNICODE_STRING Object Name List */
170  CurrentList = ExAllocatePoolWithTag(NonPagedPool,
171  sizeof(GENERAL_LOOKASIDE),
172  'MNbO');
173  if (CurrentList)
174  {
175  /* Initialize it */
177  PagedPool,
178  248,
179  'MNbO',
180  16,
182  }
183  else
184  {
185  /* No list, use the static buffer */
186  CurrentList = &ObpNameBufferLookasideList;
187  }
188 
189  /* Link it */
190  Prcb->PPLookasideList[LookasideNameBufferList].P = CurrentList;
191  }
192 
193  return TRUE;
194 }
195 
196 BOOLEAN
198 NTAPI
200 {
203  OBJECT_TYPE_INITIALIZER ObjectTypeInitializer;
205  HANDLE Handle;
206  PKPRCB Prcb = KeGetCurrentPrcb();
207  PLIST_ENTRY ListHead, NextEntry;
209  POBJECT_HEADER_CREATOR_INFO CreatorInfo;
210  POBJECT_HEADER_NAME_INFO NameInfo;
211  PSECURITY_DESCRIPTOR KernelObjectsSD = NULL;
213 
214  /* Check if this is actually Phase 1 initialization */
215  if (ObpInitializationPhase != 0) goto ObPostPhase0;
216 
217  /* Initialize the OBJECT_CREATE_INFORMATION List */
219  NonPagedPool,
221  'ICbO',
222  32,
224 
225  /* Set the captured UNICODE_STRING Object Name List */
227  PagedPool,
228  248,
229  'MNbO',
230  16,
232 
233  /* Temporarily setup both pointers to the shared list */
238 
239  /* Initialize the security descriptor cache */
240  ObpInitSdCache();
241 
242  /* Initialize the Default Event */
244 
245  /* Initialize the Dos Device Map mutex */
247 
248  /* Setup default access for the system process */
249  PsGetCurrentProcess()->GrantedAccess = PROCESS_ALL_ACCESS;
250  PsGetCurrentThread()->GrantedAccess = THREAD_ALL_ACCESS;
251 
252  /* Setup the Object Reaper */
254 
255  /* Initialize default Quota block */
257 
258  /* Create kernel handle table */
259  PsGetCurrentProcess()->ObjectTable = ExCreateHandleTable(NULL);
260  ObpKernelHandleTable = PsGetCurrentProcess()->ObjectTable;
261 
262  /* Create the Type Type */
263  RtlZeroMemory(&ObjectTypeInitializer, sizeof(ObjectTypeInitializer));
264  RtlInitUnicodeString(&Name, L"Type");
265  ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer);
266  ObjectTypeInitializer.ValidAccessMask = OBJECT_TYPE_ALL_ACCESS;
267  ObjectTypeInitializer.UseDefaultObject = TRUE;
268  ObjectTypeInitializer.MaintainTypeList = TRUE;
269  ObjectTypeInitializer.PoolType = NonPagedPool;
270  ObjectTypeInitializer.GenericMapping = ObpTypeMapping;
271  ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(OBJECT_TYPE);
272  ObjectTypeInitializer.InvalidAttributes = OBJ_OPENLINK;
273  ObjectTypeInitializer.DeleteProcedure = ObpDeleteObjectType;
274  ObCreateObjectType(&Name, &ObjectTypeInitializer, NULL, &ObpTypeObjectType);
275 
276  /* Create the Directory Type */
277  RtlInitUnicodeString(&Name, L"Directory");
278  ObjectTypeInitializer.PoolType = PagedPool;
279  ObjectTypeInitializer.ValidAccessMask = DIRECTORY_ALL_ACCESS;
280  ObjectTypeInitializer.CaseInsensitive = TRUE;
281  ObjectTypeInitializer.MaintainTypeList = FALSE;
282  ObjectTypeInitializer.GenericMapping = ObpDirectoryMapping;
283  ObjectTypeInitializer.DeleteProcedure = NULL;
284  ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(OBJECT_DIRECTORY);
285  ObCreateObjectType(&Name, &ObjectTypeInitializer, NULL, &ObDirectoryType);
287 
288  /* Create 'symbolic link' object type */
289  RtlInitUnicodeString(&Name, L"SymbolicLink");
290  ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(OBJECT_SYMBOLIC_LINK);
291  ObjectTypeInitializer.GenericMapping = ObpSymbolicLinkMapping;
292  ObjectTypeInitializer.ValidAccessMask = SYMBOLIC_LINK_ALL_ACCESS;
293  ObjectTypeInitializer.ParseProcedure = ObpParseSymbolicLink;
294  ObjectTypeInitializer.DeleteProcedure = ObpDeleteSymbolicLink;
295  ObCreateObjectType(&Name, &ObjectTypeInitializer, NULL, &ObSymbolicLinkType);
297 
298  /* Phase 0 initialization complete */
300  return TRUE;
301 
302 ObPostPhase0:
303 
304  /* Re-initialize lookaside lists */
305  ObInit2();
306 
307  /* Initialize Object Types directory attributes */
308  RtlInitUnicodeString(&Name, L"\\");
309  InitializeObjectAttributes(&ObjectAttributes,
310  &Name,
312  NULL,
314 
315  /* Create the directory */
316  Status = NtCreateDirectoryObject(&Handle,
318  &ObjectAttributes);
319  if (!NT_SUCCESS(Status)) return FALSE;
320 
321  /* Get a handle to it */
322  Status = ObReferenceObjectByHandle(Handle,
323  0,
325  KernelMode,
327  NULL);
328  if (!NT_SUCCESS(Status)) return FALSE;
329 
330  /* Close the extra handle */
331  Status = NtClose(Handle);
332  if (!NT_SUCCESS(Status)) return FALSE;
333 
334  /* Create a custom security descriptor for the KernelObjects directory */
335  Status = ObpCreateKernelObjectsSD(&KernelObjectsSD);
336  if (!NT_SUCCESS(Status))
337  return FALSE;
338 
339  /* Initialize the KernelObjects directory attributes */
340  RtlInitUnicodeString(&Name, L"\\KernelObjects");
341  InitializeObjectAttributes(&ObjectAttributes,
342  &Name,
344  NULL,
345  KernelObjectsSD);
346 
347  /* Create the directory */
348  Status = NtCreateDirectoryObject(&Handle,
350  &ObjectAttributes);
351  ExFreePoolWithTag(KernelObjectsSD, TAG_SD);
352  if (!NT_SUCCESS(Status)) return FALSE;
353 
354  /* Close the extra handle */
355  Status = NtClose(Handle);
356  if (!NT_SUCCESS(Status)) return FALSE;
357 
358  /* Initialize ObjectTypes directory attributes */
359  RtlInitUnicodeString(&Name, L"\\ObjectTypes");
360  InitializeObjectAttributes(&ObjectAttributes,
361  &Name,
363  NULL,
364  NULL);
365 
366  /* Create the directory */
367  Status = NtCreateDirectoryObject(&Handle,
369  &ObjectAttributes);
370  if (!NT_SUCCESS(Status)) return FALSE;
371 
372  /* Get a handle to it */
373  Status = ObReferenceObjectByHandle(Handle,
374  0,
376  KernelMode,
378  NULL);
379  if (!NT_SUCCESS(Status)) return FALSE;
380 
381  /* Close the extra handle */
382  Status = NtClose(Handle);
383  if (!NT_SUCCESS(Status)) return FALSE;
384 
385  /* Initialize lookup context */
386  ObpInitializeLookupContext(&Context);
387 
388  /* Lock it */
390 
391  /* Loop the object types */
392  ListHead = &ObpTypeObjectType->TypeList;
393  NextEntry = ListHead->Flink;
394  while (ListHead != NextEntry)
395  {
396  /* Get the creator info from the list */
397  CreatorInfo = CONTAINING_RECORD(NextEntry,
399  TypeList);
400 
401  /* Recover the header and the name header from the creator info */
402  Header = (POBJECT_HEADER)(CreatorInfo + 1);
403  NameInfo = OBJECT_HEADER_TO_NAME_INFO(Header);
404 
405  /* Make sure we have a name, and aren't inserted yet */
406  if ((NameInfo) && !(NameInfo->Directory))
407  {
408  /* Do the initial lookup to setup the context */
410  &NameInfo->Name,
412  FALSE,
413  &Context))
414  {
415  /* Insert this object type */
417  &Context,
418  Header);
419  }
420  }
421 
422  /* Move to the next entry */
423  NextEntry = NextEntry->Flink;
424  }
425 
426  /* Cleanup after lookup */
427  ObpReleaseLookupContext(&Context);
428 
429  /* Initialize DOS Devices Directory and related Symbolic Links */
430  Status = ObpCreateDosDevicesDirectory();
431  if (!NT_SUCCESS(Status)) return FALSE;
432  return TRUE;
433 }
434 
435 /* EOF */
VOID NTAPI ObpDeleteSymbolicLink(IN PVOID ObjectBody)
DWORD *typedef PVOID
Definition: winlogon.h:52
POBJECT_DIRECTORY Directory
Definition: obtypes.h:432
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:35
NTSTATUS NTAPI ObCreateObjectType(IN PUNICODE_STRING TypeName, IN POBJECT_TYPE_INITIALIZER ObjectTypeInitializer, IN PVOID Reserved, OUT POBJECT_TYPE *ObjectType)
Definition: oblife.c:1034
#define THREAD_ALL_ACCESS
Definition: nt_native.h:1339
#define GENERIC_ALL
Definition: nt_native.h:92
#define TRUE
Definition: types.h:120
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
#define PROCESS_ALL_ACCESS
Definition: nt_native.h:1324
#define STANDARD_RIGHTS_WRITE
Definition: nt_native.h:66
#define PsGetCurrentThread()
Definition: env_spec_w32.h:81
Definition: bidi.c:75
WORK_QUEUE_ITEM ObpReaperWorkItem
Definition: oblife.c:28
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH _In_opt_ PEPROCESS _In_opt_ PETHREAD _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
Definition: wsk.h:182
#define DIRECTORY_CREATE_OBJECT
Definition: nt_native.h:1256
struct _ACE ACE
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
Definition: ketypes.h:1054
UNICODE_STRING Name
Definition: obtypes.h:433
GENERIC_MAPPING ObpDirectoryMapping
Definition: obinit.c:27
#define OBJ_OPENLINK
Definition: winternl.h:230
static NTSTATUS NTAPI INIT_FUNCTION ObpCreateKernelObjectsSD(OUT PSECURITY_DESCRIPTOR *SecurityDescriptor)
Definition: obinit.c:61
#define OBJECT_HEADER_TO_NAME_INFO(h)
Definition: obtypes.h:114
#define OBJ_PERMANENT
Definition: winternl.h:226
POBJECT_TYPE ObDirectoryType
Definition: obdir.c:21
GENERAL_LOOKASIDE ObpCreateInfoLookasideList
Definition: oblife.c:26
NTSYSAPI NTSTATUS NTAPI RtlCreateSecurityDescriptor(_Out_ PSECURITY_DESCRIPTOR SecurityDescriptor, _In_ ULONG Revision)
ULONG ObpInitializationPhase
Definition: obinit.c:53
int32_t INT_PTR
Definition: typedefs.h:62
#define STANDARD_RIGHTS_EXECUTE
Definition: nt_native.h:67
BOOLEAN INIT_FUNCTION NTAPI ObInitSystem(VOID)
Definition: obinit.c:199
VOID NTAPI ObpDeleteObjectType(IN PVOID Object)
Definition: oblife.c:1315
static POBJECT_TYPE ObpDefaultObject
Definition: ObTypes.c:138
#define SYMBOLIC_LINK_ALL_ACCESS
Definition: nt_native.h:1267
GENERIC_MAPPING ObpTypeMapping
Definition: obinit.c:19
POBJECT_DIRECTORY ObpRootDirectoryObject
Definition: obname.c:19
NTSYSAPI NTSTATUS WINAPI RtlAddAccessAllowedAce(PACL, DWORD, DWORD, PSID)
NTSYSAPI NTSTATUS NTAPI RtlCreateAcl(PACL Acl, ULONG AclSize, ULONG AclRevision)
struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE GENERAL_LOOKASIDE
#define SECURITY_DESCRIPTOR_REVISION
Definition: setypes.h:58
PP_LOOKASIDE_LIST PPLookasideList[16]
Definition: ketypes.h:624
GLenum GLclampf GLint i
Definition: glfuncs.h:14
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:388
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
struct _OBJECT_HEADER * POBJECT_HEADER
#define FALSE
Definition: types.h:117
Definition: Header.h:8
struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE * PGENERAL_LOOKASIDE
GENERAL_LOOKASIDE ObpNameBufferLookasideList
Definition: oblife.c:26
#define PsGetCurrentProcess
Definition: psfuncs.h:17
VOID NTAPI ObpReapObject(IN PVOID Unused)
Definition: oblife.c:221
struct _ACL ACL
smooth NULL
Definition: ftsmooth.c:557
NTSTATUS NTAPI ObpCreateDosDevicesDirectory(VOID)
Definition: obname.c:130
NTSYSAPI NTSTATUS WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR, BOOLEAN, PACL, BOOLEAN)
NTSYSAPI ULONG NTAPI RtlLengthSid(IN PSID Sid)
Definition: sid.c:150
PHANDLE_TABLE ObpKernelHandleTable
Definition: obhandle.c:20
#define TAG_SD
Definition: tag.h:176
OBJECT_TYPE
Definition: ntobjenum.h:27
BOOLEAN NTAPI ObpInsertEntryDirectory(IN POBJECT_DIRECTORY Parent, IN POBP_LOOKUP_CONTEXT Context, IN POBJECT_HEADER ObjectHeader)
Definition: obdir.c:46
struct _ACL * PACL
Definition: security.c:108
#define DIRECTORY_TRAVERSE
Definition: nt_native.h:1255
struct _LIST_ENTRY * Flink
Definition: typedefs.h:119
_In_ HANDLE Handle
Definition: extypes.h:390
unsigned char BOOLEAN
#define ExInitializeWorkItem(Item, Routine, Context)
Definition: exfuncs.h:265
#define DIRECTORY_CREATE_SUBDIRECTORY
Definition: nt_native.h:1257
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:24
char CCHAR
Definition: typedefs.h:50
FORCEINLINE VOID ObpAcquireDirectoryLockExclusive(IN POBJECT_DIRECTORY Directory, IN POBP_LOOKUP_CONTEXT Context)
Definition: ob_x.h:190
OB_PARSE_METHOD ParseProcedure
Definition: obtypes.h:370
PHANDLE_TABLE NTAPI ExCreateHandleTable(IN PEPROCESS Process OPTIONAL)
Definition: handle.c:761
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3392
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
struct _GENERAL_LOOKASIDE * L
Definition: ketypes.h:760
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
_In_ PUNICODE_STRING Name
Definition: mrx.h:218
_Out_writes_bytes_to_opt_ AbsoluteSecurityDescriptorSize PSECURITY_DESCRIPTOR _Inout_ PULONG _Out_writes_bytes_to_opt_ DaclSize PACL Dacl
Definition: rtlfuncs.h:1553
VOID NTAPI INIT_FUNCTION ExInitializeSystemLookasideList(IN PGENERAL_LOOKASIDE List, IN POOL_TYPE Type, IN ULONG Size, IN ULONG Tag, IN USHORT MaximumDepth, IN PLIST_ENTRY ListHead)
Definition: lookas.c:35
PSID SeAliasAdminsSid
Definition: sid.c:47
PVOID NTAPI ObpLookupEntryDirectory(IN POBJECT_DIRECTORY Directory, IN PUNICODE_STRING Name, IN ULONG Attributes, IN UCHAR SearchShadow, IN POBP_LOOKUP_CONTEXT Context)
Definition: obdir.c:123
BOOLEAN INIT_FUNCTION NTAPI ObInit2(VOID)
Definition: obinit.c:132
#define GENERIC_READ
Definition: compat.h:124
Definition: typedefs.h:117
#define STANDARD_RIGHTS_READ
Definition: nt_native.h:65
#define SYNCHRONIZE
Definition: nt_native.h:61
OBJECT_TYPE_INITIALIZER TypeInfo
Definition: obtypes.h:390
PDEVICE_MAP ObSystemDeviceMap
Definition: obinit.c:46
#define OBJECT_TYPE_ALL_ACCESS
Definition: nt_native.h:1248
struct _SECURITY_DESCRIPTOR SECURITY_DESCRIPTOR
PSID SeWorldSid
Definition: sid.c:31
NTSTATUS NTAPI ObpInitSdCache(VOID)
Definition: obsdcach.c:61
CCHAR KeNumberProcessors
Definition: krnlinit.c:35
Status
Definition: gdiplustypes.h:24
FORCEINLINE VOID ObpReleaseLookupContext(IN POBP_LOOKUP_CONTEXT Context)
Definition: ob_x.h:255
ULONG ObpTraceLevel
Definition: obinit.c:47
NTSTATUS NTAPI NtCreateDirectoryObject(OUT PHANDLE DirectoryHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
Definition: obdir.c:731
DWORD *typedef HANDLE
Definition: winlogon.h:52
VOID FASTCALL KeInitializeGuardedMutex(OUT PKGUARDED_MUTEX GuardedMutex)
Definition: gmutex.c:31
FORCEINLINE VOID ObpInitializeLookupContext(IN POBP_LOOKUP_CONTEXT Context)
Definition: ob_x.h:221
LONG NTSTATUS
Definition: DriverTester.h:11
#define KeInitializeEvent(pEvt, foo, foo2)
Definition: env_spec_w32.h:477
GENERIC_MAPPING GenericMapping
Definition: obtypes.h:358
struct _GENERAL_LOOKASIDE * P
Definition: ketypes.h:759
PKPRCB KiProcessorBlock[]
Definition: krnlinit.c:32
#define DIRECTORY_ALL_ACCESS
Definition: nt_native.h:1259
NTSTATUS NTAPI ObpParseSymbolicLink(IN PVOID ParsedObject, IN PVOID ObjectType, IN OUT PACCESS_STATE AccessState, IN KPROCESSOR_MODE AccessMode, IN ULONG Attributes, IN OUT PUNICODE_STRING FullPath, IN OUT PUNICODE_STRING RemainingName, IN OUT PVOID Context OPTIONAL, IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL, OUT PVOID *NextObject)
Definition: oblink.c:363
GENERIC_MAPPING ObpSymbolicLinkMapping
Definition: obinit.c:38
VOID NTAPI PsInitializeQuotaSystem(VOID)
Definition: quota.c:101
static POBJECT_TYPE ObpTypeObjectType
Definition: ObTypes.c:122
#define ACL_REVISION
Definition: setypes.h:39
PSID SeLocalSystemSid
Definition: sid.c:44
#define OUT
Definition: typedefs.h:39
struct tagContext Context
Definition: acpixf.h:1014
unsigned int ULONG
Definition: retypes.h:1
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:259
#define SYMBOLIC_LINK_QUERY
Definition: nt_native.h:1265
#define DIRECTORY_QUERY
Definition: nt_native.h:1254
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:261
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
POBJECT_TYPE ObSymbolicLinkType
Definition: oblink.c:18
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1097
KGUARDED_MUTEX ObpDeviceMapLock
Definition: oblife.c:24
LIST_ENTRY TypeList
Definition: obtypes.h:382
OB_DELETE_METHOD DeleteProcedure
Definition: obtypes.h:369
struct _OBJECT_SYMBOLIC_LINK OBJECT_SYMBOLIC_LINK
ULONG DefaultNonPagedPoolCharge
Definition: obtypes.h:365
Definition: rtltypes.h:970
LIST_ENTRY ExSystemLookasideListHead
Definition: lookas.c:25
PSECURITY_DESCRIPTOR SePublicDefaultUnrestrictedSd
Definition: sd.c:23
POBJECT_DIRECTORY ObpTypeDirectoryObject
Definition: obname.c:20
#define INIT_FUNCTION
Definition: ntoskrnl.h:11
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:29
struct _OBJECT_DIRECTORY OBJECT_DIRECTORY