ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

win32k.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.