Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenwin32k.c
Go to the documentation of this file.
00001 /* 00002 * COPYRIGHT: See COPYING in the top level directory 00003 * PROJECT: ReactOS Kernel 00004 * FILE: ntoskrnl/ex/win32k.c 00005 * PURPOSE: Executive Win32 Object Support (Desktop/WinStation) 00006 * PROGRAMMERS: Alex Ionescu (alex@relsoft.net) 00007 */ 00008 00009 #include <ntoskrnl.h> 00010 #define NDEBUG 00011 #include <debug.h> 00012 00013 #if defined (ALLOC_PRAGMA) 00014 #pragma alloc_text(INIT, ExpWin32kInit) 00015 #endif 00016 00017 /* DATA **********************************************************************/ 00018 00019 POBJECT_TYPE ExWindowStationObjectType = NULL; 00020 POBJECT_TYPE ExDesktopObjectType = NULL; 00021 00022 GENERIC_MAPPING ExpWindowStationMapping = 00023 { 00024 STANDARD_RIGHTS_READ, 00025 STANDARD_RIGHTS_WRITE, 00026 STANDARD_RIGHTS_EXECUTE, 00027 STANDARD_RIGHTS_REQUIRED 00028 }; 00029 00030 GENERIC_MAPPING ExpDesktopMapping = 00031 { 00032 STANDARD_RIGHTS_READ, 00033 STANDARD_RIGHTS_WRITE, 00034 STANDARD_RIGHTS_EXECUTE, 00035 STANDARD_RIGHTS_REQUIRED 00036 }; 00037 00038 PKWIN32_PARSEMETHOD_CALLOUT ExpWindowStationObjectParse = NULL; 00039 PKWIN32_DELETEMETHOD_CALLOUT ExpWindowStationObjectDelete = NULL; 00040 PKWIN32_OKTOCLOSEMETHOD_CALLOUT ExpWindowStationObjectOkToClose = NULL; 00041 PKWIN32_OKTOCLOSEMETHOD_CALLOUT ExpDesktopObjectOkToClose = NULL; 00042 PKWIN32_DELETEMETHOD_CALLOUT ExpDesktopObjectDelete = NULL; 00043 00044 /* FUNCTIONS ****************************************************************/ 00045 00046 BOOLEAN 00047 NTAPI 00048 ExpDesktopOkToClose( IN PEPROCESS Process OPTIONAL, 00049 IN PVOID Object, 00050 IN HANDLE Handle, 00051 IN KPROCESSOR_MODE AccessMode) 00052 { 00053 WIN32_OKAYTOCLOSEMETHOD_PARAMETERS Parameters; 00054 00055 Parameters.Process = Process; 00056 Parameters.Object = Object; 00057 Parameters.Handle = Handle; 00058 Parameters.PreviousMode = AccessMode; 00059 00060 return NT_SUCCESS(ExpDesktopObjectOkToClose(&Parameters)); 00061 } 00062 00063 BOOLEAN 00064 NTAPI 00065 ExpWindowStationOkToClose( IN PEPROCESS Process OPTIONAL, 00066 IN PVOID Object, 00067 IN HANDLE Handle, 00068 IN KPROCESSOR_MODE AccessMode) 00069 { 00070 WIN32_OKAYTOCLOSEMETHOD_PARAMETERS Parameters; 00071 00072 Parameters.Process = Process; 00073 Parameters.Object = Object; 00074 Parameters.Handle = Handle; 00075 Parameters.PreviousMode = AccessMode; 00076 00077 return NT_SUCCESS(ExpWindowStationObjectOkToClose(&Parameters)); 00078 } 00079 00080 VOID 00081 NTAPI 00082 ExpWinStaObjectDelete(PVOID DeletedObject) 00083 { 00084 WIN32_DELETEMETHOD_PARAMETERS Parameters; 00085 00086 /* Fill out the callback structure */ 00087 Parameters.Object = DeletedObject; 00088 00089 /* Call the Registered Callback */ 00090 ExpWindowStationObjectDelete(&Parameters); 00091 } 00092 00093 NTSTATUS 00094 NTAPI 00095 ExpWinStaObjectParse(IN PVOID ParseObject, 00096 IN PVOID ObjectType, 00097 IN OUT PACCESS_STATE AccessState, 00098 IN KPROCESSOR_MODE AccessMode, 00099 IN ULONG Attributes, 00100 IN OUT PUNICODE_STRING CompleteName, 00101 IN OUT PUNICODE_STRING RemainingName, 00102 IN OUT PVOID Context OPTIONAL, 00103 IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL, 00104 OUT PVOID *Object) 00105 { 00106 WIN32_PARSEMETHOD_PARAMETERS Parameters; 00107 00108 /* Fill out the callback structure */ 00109 Parameters.ParseObject = ParseObject; 00110 Parameters.ObjectType = ObjectType; 00111 Parameters.AccessState = AccessState; 00112 Parameters.AccessMode = AccessMode; 00113 Parameters.Attributes = Attributes; 00114 Parameters.CompleteName = CompleteName; 00115 Parameters.RemainingName = RemainingName; 00116 Parameters.Context = Context; 00117 Parameters.SecurityQos = SecurityQos; 00118 Parameters.Object = Object; 00119 00120 /* Call the Registered Callback */ 00121 return ExpWindowStationObjectParse(&Parameters); 00122 } 00123 VOID 00124 NTAPI 00125 ExpDesktopDelete(PVOID DeletedObject) 00126 { 00127 WIN32_DELETEMETHOD_PARAMETERS Parameters; 00128 00129 /* Fill out the callback structure */ 00130 Parameters.Object = DeletedObject; 00131 00132 /* Call the Registered Callback */ 00133 ExpDesktopObjectDelete(&Parameters); 00134 } 00135 00136 VOID 00137 INIT_FUNCTION 00138 NTAPI 00139 ExpWin32kInit(VOID) 00140 { 00141 OBJECT_TYPE_INITIALIZER ObjectTypeInitializer; 00142 UNICODE_STRING Name; 00143 DPRINT("Creating Win32 Object Types\n"); 00144 00145 /* Create the window station Object Type */ 00146 RtlZeroMemory(&ObjectTypeInitializer, sizeof(ObjectTypeInitializer)); 00147 RtlInitUnicodeString(&Name, L"WindowStation"); 00148 ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer); 00149 ObjectTypeInitializer.GenericMapping = ExpWindowStationMapping; 00150 ObjectTypeInitializer.PoolType = NonPagedPool; 00151 ObjectTypeInitializer.DeleteProcedure = ExpWinStaObjectDelete; 00152 ObjectTypeInitializer.ParseProcedure = ExpWinStaObjectParse; 00153 ObjectTypeInitializer.OkayToCloseProcedure = ExpWindowStationOkToClose; 00154 ObCreateObjectType(&Name, 00155 &ObjectTypeInitializer, 00156 NULL, 00157 &ExWindowStationObjectType); 00158 00159 /* Create desktop object type */ 00160 RtlInitUnicodeString(&Name, L"Desktop"); 00161 ObjectTypeInitializer.GenericMapping = ExpDesktopMapping; 00162 ObjectTypeInitializer.DeleteProcedure = ExpDesktopDelete; 00163 ObjectTypeInitializer.ParseProcedure = NULL; 00164 ObjectTypeInitializer.OkayToCloseProcedure = ExpDesktopOkToClose; 00165 ObCreateObjectType(&Name, 00166 &ObjectTypeInitializer, 00167 NULL, 00168 &ExDesktopObjectType); 00169 } 00170 00171 /* EOF */ Generated on Sun May 27 2012 04:37:10 for ReactOS by
1.7.6.1
|