12#define CheckObject(Handle, Pointers, Handles, Attrib, Access) do \
14 PUBLIC_OBJECT_BASIC_INFORMATION ObjectInfo; \
15 Status = ZwQueryObject(Handle, ObjectBasicInformation, \
16 &ObjectInfo, sizeof ObjectInfo, NULL); \
17 ok_eq_hex(Status, STATUS_SUCCESS); \
18 ok_eq_hex(ObjectInfo.Attributes, Attrib); \
19 ok_eq_hex(ObjectInfo.GrantedAccess, Access); \
20 ok_eq_ulong(ObjectInfo.PointerCount, Pointers); \
21 ok_eq_ulong(ObjectInfo.HandleCount, Handles); \
24#define KERNEL_HANDLE_FLAG ((ULONG_PTR)0xFFFFFFFF80000000)
25#define IsUserHandle(h) (((ULONG_PTR)(h) & KERNEL_HANDLE_FLAG) == 0)
26#define IsKernelHandle(h) (((ULONG_PTR)(h) & KERNEL_HANDLE_FLAG) == KERNEL_HANDLE_FLAG)
40 ULONG RequestedAttributes;
43 ULONG ExpectedAttributes;
72 Tests[
i].RequestedAttributes,
120 HANDLE KernelDirectoryHandle;
121 HANDLE UserDirectoryHandle;
147 ok(
IsUserHandle(UserDirectoryHandle),
"User handle = %p\n", UserDirectoryHandle);
167 ok(
IsKernelHandle(KernelDirectoryHandle),
"Kernel handle = %p\n", KernelDirectoryHandle);
183 DPRINT(
"Closing null handle (NtClose)\n");
186 DPRINT(
"Closing null kernel handle (NtClose)\n");
189 DPRINT(
"Closing -1 handle (NtClose)\n");
192 DPRINT(
"Closing -1 kernel handle (NtClose)\n");
195 DPRINT(
"Closing 123 handle (NtClose)\n");
198 DPRINT(
"Closing 123 kernel handle (NtClose)\n");
203 DPRINT(
"Closing null handle (ObCloseHandle, UserMode)\n");
206 DPRINT(
"Closing null kernel handle (ObCloseHandle, UserMode)\n");
209 DPRINT(
"Closing -1 handle (ObCloseHandle, UserMode)\n");
212 DPRINT(
"Closing -1 kernel handle (ObCloseHandle, UserMode)\n");
215 DPRINT(
"Closing 123 handle (ObCloseHandle, UserMode)\n");
218 DPRINT(
"Closing 123 kernel handle (ObCloseHandle, UserMode)\n");
223 DPRINT(
"Closing null handle (ZwClose)\n");
226 DPRINT(
"Closing null kernel handle (ZwClose)\n");
231 DPRINT(
"Closing -1 kernel handle (ZwClose)\n");
239 DPRINT(
"Closing null handle (ObCloseHandle, KernelMode)\n");
242 DPRINT(
"Closing null kernel handle (ObCloseHandle, KernelMode)\n");
247 DPRINT(
"Closing -1 kernel handle (ObCloseHandle, KernelMode)\n");
#define CheckObject(Handle, Pointers, Handles, Attrib, Access)
#define IsKernelHandle(h)
static HANDLE SystemProcessHandle
static VOID TestDuplicate(_In_ HANDLE Handle)
#define ok_eq_hex(value, expected)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define STATUS_INVALID_HANDLE
#define NT_SUCCESS(StatCode)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define OBJ_KERNEL_HANDLE
#define KmtEndSeh(ExpectedStatus)
#define InitializeObjectAttributes(p, n, a, r, s)
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
NTSYSAPI NTSTATUS NTAPI ZwCreateDirectoryObject(_Out_ PHANDLE DirectoryHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes)
#define DUPLICATE_SAME_ATTRIBUTES
#define PROCESS_ALL_ACCESS
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
#define DIRECTORY_ALL_ACCESS
POBJECT_TYPE PsProcessType
NTSTATUS NTAPI ObCloseHandle(IN HANDLE Handle, IN KPROCESSOR_MODE AccessMode)
NTSTATUS NTAPI ObOpenObjectByPointer(IN PVOID Object, IN ULONG HandleAttributes, IN PACCESS_STATE PassedAccessState, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PHANDLE Handle)
PEPROCESS PsInitialSystemProcess
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
#define DUPLICATE_SAME_ACCESS
_In_ PSECURITY_SUBJECT_CONTEXT _In_ BOOLEAN _In_ ACCESS_MASK _In_ ACCESS_MASK _Outptr_opt_ PPRIVILEGE_SET _In_ PGENERIC_MAPPING _In_ KPROCESSOR_MODE _Out_ PACCESS_MASK GrantedAccess
#define ZwCurrentProcess()