diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/ntos/ex/win32.c | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'private/ntos/ex/win32.c')
-rw-r--r-- | private/ntos/ex/win32.c | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/private/ntos/ex/win32.c b/private/ntos/ex/win32.c new file mode 100644 index 000000000..e72524e9b --- /dev/null +++ b/private/ntos/ex/win32.c @@ -0,0 +1,142 @@ +/*++ + +Copyright (c) 1995 Microsoft Corporation + +Module Name: + + win32.c + +Abstract: + + This module implements the definition of the executive Win32 objects. + Functions to manage these objects are implemented in win32k.sys. + +Author: + + James I. Anderson (jima) 14-June-1995 + +Environment: + + Kernel mode only. + +Revision History: + +--*/ + +#include "exp.h" + +// +// Address of windowstation and desktop object type descriptors. +// + +POBJECT_TYPE ExWindowStationObjectType; +POBJECT_TYPE ExDesktopObjectType; + +/* + * windowstation generic mapping + */ +GENERIC_MAPPING ExpWindowStationMapping = { + STANDARD_RIGHTS_READ, + STANDARD_RIGHTS_WRITE, + STANDARD_RIGHTS_EXECUTE, + STANDARD_RIGHTS_REQUIRED +}; + +/* + * desktop generic mapping + */ +GENERIC_MAPPING ExpDesktopMapping = { + STANDARD_RIGHTS_READ, + STANDARD_RIGHTS_WRITE, + STANDARD_RIGHTS_EXECUTE, + STANDARD_RIGHTS_REQUIRED +}; + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(INIT, ExpWin32Initialization) +#endif + +BOOLEAN +ExpWin32Initialization ( + ) + +/*++ + +Routine Description: + + This function creates the Win32 object type descriptors at system + initialization and stores the address of the object type descriptor + in local static storage. + +Arguments: + + None. + +Return Value: + + A value of TRUE is returned if the Win32 object type descriptors are + successfully created. Otherwise a value of FALSE is returned. + +--*/ + +{ + + OBJECT_TYPE_INITIALIZER ObjectTypeInitializer; + NTSTATUS Status; + UNICODE_STRING TypeName; + + // + // Initialize string descriptor. + // + + RtlInitUnicodeString(&TypeName, L"WindowStation"); + + // + // Create windowstation object type descriptor. + // + + RtlZeroMemory(&ObjectTypeInitializer, sizeof(ObjectTypeInitializer)); + ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer); + ObjectTypeInitializer.InvalidAttributes = OBJ_OPENLINK; + ObjectTypeInitializer.GenericMapping = ExpWindowStationMapping; + ObjectTypeInitializer.SecurityRequired = TRUE; + ObjectTypeInitializer.PoolType = NonPagedPool; + ObjectTypeInitializer.InvalidAttributes = OBJ_PERMANENT | + OBJ_EXCLUSIVE; + ObjectTypeInitializer.ValidAccessMask = STANDARD_RIGHTS_REQUIRED; + Status = ObCreateObjectType(&TypeName, + &ObjectTypeInitializer, + (PSECURITY_DESCRIPTOR)NULL, + &ExWindowStationObjectType); + + // + // If the windowstation object type descriptor was not successfully + // created, then return a value of FALSE. + // + + if (!NT_SUCCESS(Status)) + return FALSE; + + // + // Initialize string descriptor. + // + + RtlInitUnicodeString(&TypeName, L"Desktop"); + + // + // Create windowstation object type descriptor. + // + + ObjectTypeInitializer.GenericMapping = ExpDesktopMapping; + Status = ObCreateObjectType(&TypeName, + &ObjectTypeInitializer, + (PSECURITY_DESCRIPTOR)NULL, + &ExDesktopObjectType); + + // + // If the desktop object type descriptor was successfully created, then + // return a value of TRUE. Otherwise return a value of FALSE. + // + + return (BOOLEAN)(NT_SUCCESS(Status)); +} |