diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index 4b626607502..e7f6b1dc550 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -251,6 +251,16 @@ static HANDLE get_device_manager(void) return ret; } + +static const WCHAR file_type_name[] = {'F','i','l','e',0}; + +static struct _OBJECT_TYPE file_type = { + file_type_name, +}; + +POBJECT_TYPE IoFileObjectType = &file_type; + + /* transfer result of IRP back to wineserver */ static NTSTATUS WINAPI dispatch_irp_completion( DEVICE_OBJECT *device, IRP *irp, void *context ) { @@ -1090,6 +1100,16 @@ static NTSTATUS WINAPI unhandled_irp( DEVICE_OBJECT *device, IRP *irp ) } +static const WCHAR driver_type_name[] = {'D','r','i','v','e','r',0}; + +static struct _OBJECT_TYPE driver_type = +{ + driver_type_name, +}; + +POBJECT_TYPE IoDriverObjectType = &driver_type; + + /*********************************************************************** * IoCreateDriver (NTOSKRNL.EXE.@) */ @@ -1159,6 +1179,16 @@ void WINAPI IoDeleteDriver( DRIVER_OBJECT *driver_object ) } +static const WCHAR device_type_name[] = {'D','e','v','i','c','e',0}; + +static struct _OBJECT_TYPE device_type = +{ + device_type_name +}; + +POBJECT_TYPE IoDeviceObjectType = &device_type; + + /*********************************************************************** * IoCreateDevice (NTOSKRNL.EXE.@) */ @@ -2169,6 +2199,17 @@ NTSTATUS WINAPI FsRtlRegisterUncProvider(PHANDLE MupHandle, PUNICODE_STRING Redi return STATUS_NOT_IMPLEMENTED; } + +static const WCHAR process_type_name[] = {'P','r','o','c','e','s','s',0}; + +static struct _OBJECT_TYPE process_type = +{ + process_type_name +}; + +POBJECT_TYPE PsProcessType = &process_type; + + /*********************************************************************** * IoGetCurrentProcess / PsGetCurrentProcess (NTOSKRNL.EXE.@) */ @@ -2178,6 +2219,17 @@ PEPROCESS WINAPI IoGetCurrentProcess(void) return NULL; } + +static const WCHAR thread_type_name[] = {'T','h','r','e','a','d',0}; + +static struct _OBJECT_TYPE thread_type = +{ + thread_type_name, +}; + +POBJECT_TYPE PsThreadType = &thread_type; + + /*********************************************************************** * KeGetCurrentThread / PsGetCurrentThread (NTOSKRNL.EXE.@) */ @@ -3983,3 +4035,12 @@ void WINAPI KeLeaveGuardedRegion(void) { FIXME("\n"); } + +static const WCHAR token_type_name[] = {'T','o','k','e','n',0}; + +static struct _OBJECT_TYPE token_type = +{ + token_type_name +}; + +POBJECT_TYPE SeTokenObjectType = &token_type; diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index 286d688b2a6..4dcd5530494 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -138,7 +138,7 @@ @ stub ExDesktopObjectType @ stub ExDisableResourceBoostLite @ stub ExEnumHandleTable -@ stub ExEventObjectType +@ extern ExEventObjectType @ stub ExExtendZone @ stdcall -norelay ExfUnblockPushLock(ptr ptr) @ stdcall ExFreePool(ptr) @@ -179,7 +179,7 @@ @ stub ExRegisterCallback @ stub ExReinitializeResourceLite @ stdcall ExReleaseResourceForThreadLite(ptr long) -@ stub ExSemaphoreObjectType +@ extern ExSemaphoreObjectType @ stub ExSetResourceOwnerPointer @ stub ExSetTimerResolution @ stub ExSystemExceptionFilter @@ -369,13 +369,13 @@ @ stub IoDetachDevice @ stub IoDeviceHandlerObjectSize @ stub IoDeviceHandlerObjectType -@ stub IoDeviceObjectType +@ extern IoDeviceObjectType @ stub IoDisconnectInterrupt -@ stub IoDriverObjectType +@ extern IoDriverObjectType @ stub IoEnqueueIrp @ stub IoEnumerateDeviceObjectList @ stub IoFastQueryNetworkAttributes -@ stub IoFileObjectType +@ extern IoFileObjectType @ stub IoForwardAndCatchIrp @ stub IoForwardIrpSynchronously @ stub IoFreeController @@ -914,7 +914,7 @@ @ stdcall PsLookupProcessByProcessId(ptr ptr) @ stub PsLookupProcessThreadByCid @ stub PsLookupThreadByThreadId -@ stub PsProcessType +@ extern PsProcessType @ stub PsReferenceImpersonationToken @ stub PsReferencePrimaryToken @ stdcall PsReferenceProcessFilePointer(ptr ptr) @@ -942,7 +942,7 @@ @ stub PsSetThreadHardErrorsAreDisabled @ stub PsSetThreadWin32Thread @ stdcall PsTerminateSystemThread(long) -@ stub PsThreadType +@ extern PsThreadType @ stdcall READ_REGISTER_BUFFER_UCHAR(ptr ptr long) @ stub READ_REGISTER_BUFFER_ULONG @ stub READ_REGISTER_BUFFER_USHORT @@ -1275,7 +1275,7 @@ @ stub SeTokenIsAdmin @ stub SeTokenIsRestricted @ stub SeTokenIsWriteRestricted -@ stub SeTokenObjectType +@ extern SeTokenObjectType @ stub SeTokenType @ stub SeUnlockSubjectContext @ stub SeUnregisterLogonSessionTerminatedRoutine diff --git a/dlls/ntoskrnl.exe/ntoskrnl_private.h b/dlls/ntoskrnl.exe/ntoskrnl_private.h index 241e15f8271..859c1d18441 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl_private.h +++ b/dlls/ntoskrnl.exe/ntoskrnl_private.h @@ -21,6 +21,10 @@ #ifndef __WINE_NTOSKRNL_PRIVATE_H #define __WINE_NTOSKRNL_PRIVATE_H +struct _OBJECT_TYPE { + const WCHAR *name; /* object type name used for type validation */ +}; + #ifdef __i386__ #define DEFINE_FASTCALL1_ENTRYPOINT( name ) \ __ASM_STDCALL_FUNC( name, 4, \ diff --git a/dlls/ntoskrnl.exe/sync.c b/dlls/ntoskrnl.exe/sync.c index 98b3f9d91a2..081306c8b89 100644 --- a/dlls/ntoskrnl.exe/sync.c +++ b/dlls/ntoskrnl.exe/sync.c @@ -186,6 +186,14 @@ void WINAPI KeInitializeEvent( PRKEVENT event, EVENT_TYPE type, BOOLEAN state ) event->Header.WaitListHead.Flink = NULL; } +static const WCHAR event_type_name[] = {'E','v','e','n','t',0}; + +static struct _OBJECT_TYPE event_type = { + event_type_name, +}; + +POBJECT_TYPE ExEventObjectType = &event_type; + /*********************************************************************** * KeSetEvent (NTOSKRNL.EXE.@) */ @@ -267,6 +275,15 @@ LONG WINAPI KeReleaseSemaphore( PRKSEMAPHORE semaphore, KPRIORITY increment, return ret; } +static const WCHAR semaphore_type_name[] = {'S','e','m','a','p','h','o','r','e',0}; + +static struct _OBJECT_TYPE semaphore_type = +{ + semaphore_type_name +}; + +POBJECT_TYPE ExSemaphoreObjectType = &semaphore_type; + /*********************************************************************** * KeInitializeMutex (NTOSKRNL.EXE.@) */