ReactOS 0.4.15-dev-7788-g1ad9096
ObTypes.c File Reference
#include <kmt_test.h>
#include <debug.h>
Include dependency graph for ObTypes.c:

Go to the source code of this file.

Macros

#define NDEBUG
 
#define ok_eq_ustr(value, expected)   ok(RtlEqualUnicodeString(value, expected, FALSE), #value " = \"%wZ\", expected \"%%wZ\"\n", value, expected)
 
#define CheckObjectType(TypeName, Variable, Flags, InvalidAttr, ReadMapping, WriteMapping, ExecMapping, AllMapping, ValidMask)
 
#define ObpDirectoryObjectType   NULL
 
#define ObpSymbolicLinkObjectType   NULL
 
#define DbgkDebugObjectType   NULL
 
#define ExEventPairObjectType   NULL
 
#define ExMutantObjectType   NULL
 
#define ExCallbackObjectType   NULL
 
#define ExTimerObjectType   NULL
 
#define ExProfileObjectType   NULL
 
#define ExpKeyedEventObjectType   NULL
 
#define CmpKeyObjectType   NULL
 
#define LpcWaitablePortObjectType   NULL
 
#define IoControllerObjectType   NULL
 
#define IoCompletionObjectType   NULL
 
#define WmipGuidObjectType   NULL
 
#define OBT_NO_DEFAULT   0x01
 
#define OBT_CUSTOM_SECURITY_PROC   0x02
 
#define OBT_SECURITY_REQUIRED   0x04
 
#define OBT_CASE_INSENSITIVE   0x08
 
#define OBT_MAINTAIN_TYPE_LIST   0x10
 
#define OBT_MAINTAIN_HANDLE_COUNT   0x20
 
#define OBT_PAGED_POOL   0x40
 
#define OBT_CUSTOM_KEY   0x80
 
#define TAG(x)   RtlUlongByteSwap(x)
 

Functions

static POBJECT_TYPE GetObjectType (IN PCWSTR TypeName)
 
static VOID TestObjectTypes (VOID)
 
 START_TEST (ObTypes)
 

Variables

static POBJECT_TYPE ObpTypeObjectType
 
static POBJECT_TYPE ObpDefaultObject
 
static OB_SECURITY_METHOD SeDefaultObjectMethod
 

Macro Definition Documentation

◆ CheckObjectType

#define CheckObjectType (   TypeName,
  Variable,
  Flags,
  InvalidAttr,
  ReadMapping,
  WriteMapping,
  ExecMapping,
  AllMapping,
  ValidMask 
)

Definition at line 42 of file ObTypes.c.

◆ CmpKeyObjectType

#define CmpKeyObjectType   NULL

Definition at line 127 of file ObTypes.c.

◆ DbgkDebugObjectType

#define DbgkDebugObjectType   NULL

Definition at line 120 of file ObTypes.c.

◆ ExCallbackObjectType

#define ExCallbackObjectType   NULL

Definition at line 123 of file ObTypes.c.

◆ ExEventPairObjectType

#define ExEventPairObjectType   NULL

Definition at line 121 of file ObTypes.c.

◆ ExMutantObjectType

#define ExMutantObjectType   NULL

Definition at line 122 of file ObTypes.c.

◆ ExpKeyedEventObjectType

#define ExpKeyedEventObjectType   NULL

Definition at line 126 of file ObTypes.c.

◆ ExProfileObjectType

#define ExProfileObjectType   NULL

Definition at line 125 of file ObTypes.c.

◆ ExTimerObjectType

#define ExTimerObjectType   NULL

Definition at line 124 of file ObTypes.c.

◆ IoCompletionObjectType

#define IoCompletionObjectType   NULL

Definition at line 130 of file ObTypes.c.

◆ IoControllerObjectType

#define IoControllerObjectType   NULL

Definition at line 129 of file ObTypes.c.

◆ LpcWaitablePortObjectType

#define LpcWaitablePortObjectType   NULL

Definition at line 128 of file ObTypes.c.

◆ NDEBUG

#define NDEBUG

Definition at line 10 of file ObTypes.c.

◆ ObpDirectoryObjectType

#define ObpDirectoryObjectType   NULL

Definition at line 118 of file ObTypes.c.

◆ ObpSymbolicLinkObjectType

#define ObpSymbolicLinkObjectType   NULL

Definition at line 119 of file ObTypes.c.

◆ OBT_CASE_INSENSITIVE

#define OBT_CASE_INSENSITIVE   0x08

Definition at line 139 of file ObTypes.c.

◆ OBT_CUSTOM_KEY

#define OBT_CUSTOM_KEY   0x80

Definition at line 143 of file ObTypes.c.

◆ OBT_CUSTOM_SECURITY_PROC

#define OBT_CUSTOM_SECURITY_PROC   0x02

Definition at line 137 of file ObTypes.c.

◆ OBT_MAINTAIN_HANDLE_COUNT

#define OBT_MAINTAIN_HANDLE_COUNT   0x20

Definition at line 141 of file ObTypes.c.

◆ OBT_MAINTAIN_TYPE_LIST

#define OBT_MAINTAIN_TYPE_LIST   0x10

Definition at line 140 of file ObTypes.c.

◆ OBT_NO_DEFAULT

#define OBT_NO_DEFAULT   0x01

Definition at line 136 of file ObTypes.c.

◆ OBT_PAGED_POOL

#define OBT_PAGED_POOL   0x40

Definition at line 142 of file ObTypes.c.

◆ OBT_SECURITY_REQUIRED

#define OBT_SECURITY_REQUIRED   0x04

Definition at line 138 of file ObTypes.c.

◆ ok_eq_ustr

#define ok_eq_ustr (   value,
  expected 
)    ok(RtlEqualUnicodeString(value, expected, FALSE), #value " = \"%wZ\", expected \"%%wZ\"\n", value, expected)

Definition at line 40 of file ObTypes.c.

◆ TAG

#define TAG (   x)    RtlUlongByteSwap(x)

Definition at line 145 of file ObTypes.c.

◆ WmipGuidObjectType

#define WmipGuidObjectType   NULL

Definition at line 131 of file ObTypes.c.

Function Documentation

◆ GetObjectType()

static POBJECT_TYPE GetObjectType ( IN PCWSTR  TypeName)
static

Definition at line 15 of file ObTypes.c.

17{
23
24 RtlInitUnicodeString(&Name, TypeName);
28 ok(Handle != NULL, "ObjectTypeHandle = NULL\n");
29 if (!skip(Status == STATUS_SUCCESS && Handle, "No handle\n"))
30 {
33 ok(ObjectType != NULL, "ObjectType = NULL\n");
36 }
37 return ObjectType;
38}
struct NameRec_ * Name
Definition: cdprocs.h:460
#define ok_eq_hex(value, expected)
Definition: apitest.h:76
#define ok(value,...)
Definition: atltest.h:57
#define skip(...)
Definition: atltest.h:64
LONG NTSTATUS
Definition: precomp.h:26
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:36
#define NULL
Definition: types.h:112
ULONG Handle
Definition: gdb_input.c:15
Status
Definition: gdiplustypes.h:25
#define OBJ_KERNEL_HANDLE
Definition: winternl.h:231
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
ObjectType
Definition: metafile.c:81
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
#define KernelMode
Definition: asm.h:34
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSTATUS NTAPI ObOpenObjectByName(IN POBJECT_ATTRIBUTES ObjectAttributes, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, IN PACCESS_STATE PassedAccessState, IN ACCESS_MASK DesiredAccess, IN OUT PVOID ParseContext, OUT PHANDLE Handle)
Definition: obhandle.c:2532
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:494
#define STATUS_SUCCESS
Definition: shellext.h:65

Referenced by CloseEnhMetaFile(), get_dc_data_ex(), get_graphics_device_bounds(), MFDRV_CloseMetaFile(), OleIsDcMeta(), STATIC_PaintBitmapfn(), STATIC_PaintEnhMetafn(), STATIC_SetBitmap(), STATIC_SetEnhMetaFile(), test_CopyMetaFile(), test_D3DKMTCreateDCFromMemory(), test_data_handles(), test_DeleteDC(), test_device_caps(), test_ExtTextOut(), test_gdi_objects(), test_GetCurrentObject(), test_handles(), test_handles_on_win64(), test_handles_process(), test_handles_process_dib(), test_handles_thread2(), test_hfont_lifetime(), test_logpen(), test_mf_Blank(), test_mf_Graphics(), test_mf_PatternBrush(), test_mono_1x1_bmp_dbg(), test_nonole_clipboard(), test_SetMetaFileBits(), test_thread_objects(), TestObjectTypes(), and wglMakeCurrent().

◆ START_TEST()

START_TEST ( ObTypes  )

Definition at line 254 of file ObTypes.c.

◆ TestObjectTypes()

static VOID TestObjectTypes ( VOID  )
static

Definition at line 149 of file ObTypes.c.

155{
156 ULONG Index;
157
158 ObpTypeObjectType = GetObjectType(L"\\ObjectTypes\\Type");
159 if (skip(ObpTypeObjectType != NULL, "No Type object type\n"))
160 return;
161
163 ok(ObpDefaultObject != NULL, "No ObpDefaultObject\n");
165 ok(SeDefaultObjectMethod != NULL, "No SeDefaultObjectMethod\n");
166
167#ifdef _PROPER_NT_NDK_EXPORTS
168#define ObpTypeObjectType *ObpTypeObjectType
169#define ObpDirectoryObjectType *ObpDirectoryObjectType
170#define ObpSymbolicLinkObjectType *ObpSymbolicLinkObjectType
171#define PsJobType *PsJobType
172#define DbgkDebugObjectType *DbgkDebugObjectType
173#define ExEventPairObjectType *ExEventPairObjectType
174#define ExMutantObjectType *ExMutantObjectType
175#define ExCallbackObjectType *ExCallbackObjectType
176#define ExTimerObjectType *ExTimerObjectType
177#define ExProfileObjectType *ExProfileObjectType
178#define ExpKeyedEventObjectType *ExpKeyedEventObjectType
179#define ExWindowStationObjectType *ExWindowStationObjectType
180#define ExDesktopObjectType *ExDesktopObjectType
181#define MmSectionObjectType *MmSectionObjectType
182#define CmpKeyObjectType *CmpKeyObjectType
183#define LpcPortObjectType *LpcPortObjectType
184#define LpcWaitablePortObjectType *LpcWaitablePortObjectType
185#define IoAdapterObjectType *IoAdapterObjectType
186#define IoControllerObjectType *IoControllerObjectType
187#define IoDeviceObjectType *IoDeviceObjectType
188#define IoDriverObjectType *IoDriverObjectType
189#define IoCompletionObjectType *IoCompletionObjectType
190#define WmipGuidObjectType *WmipGuidObjectType
191#endif
192
193 Index = 1;
194 CheckObjectType(Type, ObpTypeObjectType, OBT_MAINTAIN_TYPE_LIST | OBT_CUSTOM_KEY, 0x100, 0x020000, 0x020000, 0x020000, 0x0f0001, 0x1f0001);
196 CheckObjectType(Directory, ObpDirectoryObjectType, OBT_CASE_INSENSITIVE | OBT_PAGED_POOL, 0x100, 0x020003, 0x02000c, 0x020003, 0x0f000f, 0x0f000f);
197 CheckObjectType(SymbolicLink, ObpSymbolicLinkObjectType, OBT_CASE_INSENSITIVE | OBT_PAGED_POOL, 0x100, 0x020001, 0x020000, 0x020001, 0x0f0001, 0x0f0001);
198 CheckObjectType(Token, *SeTokenObjectType, OBT_SECURITY_REQUIRED | OBT_PAGED_POOL, 0x100, 0x020008, 0x0200e0, 0x020000, 0x0f01ff, 0x1f01ff);
199 CheckObjectType(Process, *PsProcessType, OBT_NO_DEFAULT | OBT_SECURITY_REQUIRED, 0x0b0, 0x020410, 0x020beb, 0x120000, 0x1f0fff, 0x1f0fff);
200 CheckObjectType(Thread, *PsThreadType, OBT_NO_DEFAULT | OBT_SECURITY_REQUIRED, 0x0b0, 0x020048, 0x020037, 0x120000, 0x1f03ff, 0x1f03ff);
201 CheckObjectType(Job, PsJobType, OBT_NO_DEFAULT | OBT_SECURITY_REQUIRED, 0x000, 0x020004, 0x02000b, 0x120000, 0x1f03ff, 0x1f001f);
202 CheckObjectType(DebugObject, DbgkDebugObjectType, OBT_NO_DEFAULT | OBT_SECURITY_REQUIRED, 0x000, 0x020001, 0x020002, 0x120000, 0x1f000f, 0x1f000f);
203 CheckObjectType(Event, *ExEventObjectType, OBT_NO_DEFAULT, 0x100, 0x020001, 0x020002, 0x120000, 0x1f0003, 0x1f0003);
204 CheckObjectType(EventPair, ExEventPairObjectType, 0, 0x100, 0x120000, 0x120000, 0x120000, 0x1f0000, 0x1f0000);
205 CheckObjectType(Mutant, ExMutantObjectType, OBT_NO_DEFAULT, 0x100, 0x020001, 0x020000, 0x120000, 0x1f0001, 0x1f0001);
206 CheckObjectType(Callback, ExCallbackObjectType, OBT_NO_DEFAULT, 0x100, 0x020000, 0x020001, 0x120000, 0x1f0001, 0x1f0001);
207 CheckObjectType(Semaphore, *ExSemaphoreObjectType, OBT_NO_DEFAULT, 0x100, 0x020001, 0x020002, 0x120000, 0x1f0003, 0x1f0003);
208 CheckObjectType(Timer, ExTimerObjectType, OBT_NO_DEFAULT, 0x100, 0x020001, 0x020002, 0x120000, 0x1f0003, 0x1f0003);
209 CheckObjectType(Profile, ExProfileObjectType, OBT_NO_DEFAULT, 0x100, 0x020001, 0x020001, 0x020001, 0x0f0001, 0x0f0001);
210 CheckObjectType(KeyedEvent, ExpKeyedEventObjectType, OBT_PAGED_POOL, 0x000, 0x020001, 0x020002, 0x020000, 0x0f0003, 0x1f0003);
212 0x130, 0x020303, 0x02001c, 0x020060, 0x0f037f, 0x0f037f);
214 0x130, 0x020041, 0x0200be, 0x020100, 0x0f01ff, 0x0f01ff);
215 CheckObjectType(Section, MmSectionObjectType, OBT_PAGED_POOL, 0x100, 0x020005, 0x020002, 0x020008, 0x0f001f, 0x1f001f);
217 0x030, 0x020019, 0x020006, 0x020019, 0x0f003f, 0x1f003f);
218 // 0x7b2 is used for Server 2003 SP2 RTM, it seems it was changed to 0xfb2 in some patch level.
219 CheckObjectType(Port, LpcPortObjectType, OBT_PAGED_POOL, 0xfb2, 0x020001, 0x010001, 0x000000, 0x1f0001, 0x1f0001);
220 // 0x7b2 is used for Server 2003 SP2 RTM, it seems it was changed to 0xfb2 in some patch level.
221 CheckObjectType(WaitablePort, LpcWaitablePortObjectType, OBT_NO_DEFAULT, 0xfb2, 0x020001, 0x010001, 0x000000, 0x1f0001, 0x1f0001);
222 CheckObjectType(Adapter, IoAdapterObjectType, 0, 0x100, 0x120089, 0x120116, 0x1200a0, 0x1f01ff, 0x1f01ff);
223 CheckObjectType(Controller, IoControllerObjectType, 0, 0x100, 0x120089, 0x120116, 0x1200a0, 0x1f01ff, 0x1f01ff);
225 0x100, 0x120089, 0x120116, 0x1200a0, 0x1f01ff, 0x1f01ff);
226 CheckObjectType(Driver, IoDriverObjectType, OBT_CASE_INSENSITIVE, 0x100, 0x120089, 0x120116, 0x1200a0, 0x1f01ff, 0x1f01ff);
227 CheckObjectType(IoCompletion, IoCompletionObjectType, OBT_CASE_INSENSITIVE, 0x110, 0x020001, 0x020002, 0x120000, 0x1f0003, 0x1f0003);
229 0x130, 0x120089, 0x120116, 0x1200a0, 0x1f01ff, 0x1f01ff);
231 0x100, 0x000001, 0x000002, 0x000010, 0x120fff, 0x1f0fff);
232 CheckObjectType(FilterConnectionPort, NULL, OBT_NO_DEFAULT | OBT_SECURITY_REQUIRED, 0x100, 0x020001, 0x010001, 0x000000, 0x1f0001, 0x1f0001);
233 CheckObjectType(FilterCommunicationPort, NULL, OBT_NO_DEFAULT, 0x100, 0x020001, 0x010001, 0x000000, 0x1f0001, 0x1f0001);
234
235 // exported but not created
237
238 // my Win7/x64 additionally has:
239 // ALPC Port
240 // EtwConsumer
241 // EtwRegistration
242 // IoCompletionReserve
243 // PcwObject
244 // PowerRequest
245 // Session
246 // TmEn
247 // TmRm
248 // TmTm
249 // TmTx
250 // TpWorkerFactory
251 // UserApcReserve
252 // ... and does not have:
#define ObpDirectoryObjectType
Definition: ObTypes.c:118
#define OBT_CUSTOM_KEY
Definition: ObTypes.c:143
#define IoCompletionObjectType
Definition: ObTypes.c:130
static POBJECT_TYPE ObpDefaultObject
Definition: ObTypes.c:133
static POBJECT_TYPE ObpTypeObjectType
Definition: ObTypes.c:117
#define ExProfileObjectType
Definition: ObTypes.c:125
#define WmipGuidObjectType
Definition: ObTypes.c:131
#define IoControllerObjectType
Definition: ObTypes.c:129
#define OBT_CUSTOM_SECURITY_PROC
Definition: ObTypes.c:137
static OB_SECURITY_METHOD SeDefaultObjectMethod
Definition: ObTypes.c:134
#define ExEventPairObjectType
Definition: ObTypes.c:121
#define OBT_CASE_INSENSITIVE
Definition: ObTypes.c:139
#define LpcWaitablePortObjectType
Definition: ObTypes.c:128
#define ExTimerObjectType
Definition: ObTypes.c:124
#define OBT_NO_DEFAULT
Definition: ObTypes.c:136
#define OBT_MAINTAIN_HANDLE_COUNT
Definition: ObTypes.c:141
#define OBT_MAINTAIN_TYPE_LIST
Definition: ObTypes.c:140
#define ObpSymbolicLinkObjectType
Definition: ObTypes.c:119
#define DbgkDebugObjectType
Definition: ObTypes.c:120
#define OBT_SECURITY_REQUIRED
Definition: ObTypes.c:138
#define ExpKeyedEventObjectType
Definition: ObTypes.c:126
#define CmpKeyObjectType
Definition: ObTypes.c:127
#define ExCallbackObjectType
Definition: ObTypes.c:123
#define ExMutantObjectType
Definition: ObTypes.c:122
#define CheckObjectType(TypeName, Variable, Flags, InvalidAttr, ReadMapping, WriteMapping, ExecMapping, AllMapping, ValidMask)
Definition: ObTypes.c:42
#define OBT_PAGED_POOL
Definition: ObTypes.c:142
static POBJECT_TYPE GetObjectType(IN PCWSTR TypeName)
Definition: ObTypes.c:15
Type
Definition: Type.h:7
#define ok_eq_pointer(value, expected)
Definition: apitest.h:58
Definition: File.h:16
static const WCHAR SymbolicLink[]
Definition: interface.c:31
NTSTATUS NTAPI IoCompletion(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Ctx)
Definition: control.c:382
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
Definition: fltkernel.h:2653
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
Definition: fsrtlfuncs.h:223
CPPORT Port[4]
Definition: headless.c:35
POBJECT_TYPE IoDeviceObjectType
Definition: iomgr.c:35
POBJECT_TYPE IoFileObjectType
Definition: iomgr.c:36
POBJECT_TYPE LpcPortObjectType
Definition: port.c:17
POBJECT_TYPE ExEventObjectType
Definition: event.c:18
POBJECT_TYPE IoDeviceHandlerObjectType
Definition: adapter.c:19
POBJECT_TYPE IoAdapterObjectType
Definition: adapter.c:18
POBJECT_TYPE IoDriverObjectType
Definition: driver.c:34
POBJECT_TYPE PsProcessType
Definition: process.c:20
POBJECT_TYPE PsThreadType
Definition: thread.c:20
POBJECT_TYPE SeTokenObjectType
Definition: token.c:17
#define L(x)
Definition: ntvdm.h:50
POBJECT_TYPE PsJobType
Definition: job.c:20
POBJECT_TYPE MmSectionObjectType
Definition: section.c:194
POBJECT_TYPE ExSemaphoreObjectType
Definition: sem.c:22
base for all directory entries
Definition: entries.h:138
OB_SECURITY_METHOD SecurityProcedure
Definition: obtypes.h:371
OBJECT_TYPE_INITIALIZER TypeInfo
Definition: obtypes.h:390
ULONG Key
Definition: obtypes.h:391
PVOID DefaultObject
Definition: obtypes.h:384
Definition: fs_rec.h:143
uint32_t ULONG
Definition: typedefs.h:59
_Must_inspect_result_ _In_ WDFDEVICE Device
Definition: wdfchildlist.h:474
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDRIVER Driver
Definition: wdfcontrol.h:83
_In_ WDFINTERRUPT _In_ PFN_WDF_INTERRUPT_SYNCHRONIZE Callback
Definition: wdfinterrupt.h:458
POBJECT_TYPE ExDesktopObjectType
Definition: win32k.c:22
POBJECT_TYPE ExWindowStationObjectType
Definition: win32k.c:21

Variable Documentation

◆ ObpDefaultObject

POBJECT_TYPE ObpDefaultObject
static

Definition at line 133 of file ObTypes.c.

Referenced by ObInitSystem(), and TestObjectTypes().

◆ ObpTypeObjectType

POBJECT_TYPE ObpTypeObjectType
static

Definition at line 117 of file ObTypes.c.

Referenced by ObInitSystem(), and TestObjectTypes().

◆ SeDefaultObjectMethod

OB_SECURITY_METHOD SeDefaultObjectMethod
static