mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
[KMTESTS:OB] Write some object information querying tests
This commit is contained in:
parent
29fc7bb33e
commit
1b33c9415c
3 changed files with 74 additions and 0 deletions
|
@ -88,6 +88,7 @@ list(APPEND KMTEST_DRV_SOURCE
|
|||
ntos_mm/ZwCreateSection.c
|
||||
ntos_mm/ZwMapViewOfSection.c
|
||||
ntos_ob/ObHandle.c
|
||||
ntos_ob/ObQuery.c
|
||||
ntos_ob/ObReference.c
|
||||
ntos_ob/ObSecurity.c
|
||||
ntos_ob/ObSymbolicLink.c
|
||||
|
|
|
@ -56,6 +56,7 @@ KMT_TESTFUNC Test_NpfsFileInfo;
|
|||
KMT_TESTFUNC Test_NpfsReadWrite;
|
||||
KMT_TESTFUNC Test_NpfsVolumeInfo;
|
||||
KMT_TESTFUNC Test_ObHandle;
|
||||
KMT_TESTFUNC Test_ObQuery;
|
||||
KMT_TESTFUNC Test_ObReference;
|
||||
KMT_TESTFUNC Test_ObSecurity;
|
||||
KMT_TESTFUNC Test_ObSymbolicLink;
|
||||
|
@ -137,6 +138,7 @@ const KMT_TEST TestList[] =
|
|||
{ "NpfsReadWrite", Test_NpfsReadWrite },
|
||||
{ "NpfsVolumeInfo", Test_NpfsVolumeInfo },
|
||||
{ "ObHandle", Test_ObHandle },
|
||||
{ "ObQuery", Test_ObQuery },
|
||||
{ "ObReference", Test_ObReference },
|
||||
{ "ObSecurity", Test_ObSecurity },
|
||||
{ "ObSymbolicLink", Test_ObSymbolicLink },
|
||||
|
|
71
modules/rostests/kmtests/ntos_ob/ObQuery.c
Normal file
71
modules/rostests/kmtests/ntos_ob/ObQuery.c
Normal file
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
* PROJECT: ReactOS kernel-mode tests
|
||||
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||
* PURPOSE: Kernel mode tests for object information querying
|
||||
* COPYRIGHT: Copyright 2023 George Bișoc <george.bisoc@reactos.org>
|
||||
*/
|
||||
|
||||
#include <kmt_test.h>
|
||||
|
||||
#define OBJ_WINSTA_DIRECTORY_NAME_INFO_SIZE (sizeof(UNICODE_STRING) + sizeof(L"\\Windows"))
|
||||
#define OBJ_DIRECTORY_TYPE_INFO_SIZE (sizeof(OBJECT_TYPE_INFORMATION) + (wcslen(L"\\Directory") * sizeof(WCHAR)))
|
||||
|
||||
static
|
||||
VOID
|
||||
ObjectBasicInformationTests(VOID)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
HANDLE WinStaDirHandle;
|
||||
OBJECT_BASIC_INFORMATION BasicInfo;
|
||||
ULONG ReturnLength;
|
||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
static UNICODE_STRING WinStaDir = RTL_CONSTANT_STRING(L"\\Windows");
|
||||
|
||||
/* We must be in PASSIVE_LEVEL to do all of this stuff */
|
||||
ok_irql(PASSIVE_LEVEL);
|
||||
|
||||
/* Create a path to \Windows directory */
|
||||
InitializeObjectAttributes(&ObjectAttributes,
|
||||
&WinStaDir,
|
||||
OBJ_CASE_INSENSITIVE | OBJ_OPENIF | OBJ_KERNEL_HANDLE,
|
||||
NULL,
|
||||
NULL);
|
||||
Status = ZwOpenDirectoryObject(&WinStaDirHandle,
|
||||
DIRECTORY_QUERY | DIRECTORY_TRAVERSE,
|
||||
&ObjectAttributes);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
ok(FALSE, "Failed to open \\Windows directory (Status 0x%lx)\n", Status);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Give 0 as information length, this must fail */
|
||||
Status = ZwQueryObject(WinStaDirHandle,
|
||||
ObjectBasicInformation,
|
||||
&BasicInfo,
|
||||
0,
|
||||
&ReturnLength);
|
||||
ok_eq_hex(Status, STATUS_INFO_LENGTH_MISMATCH);
|
||||
|
||||
/* Do a proper query now */
|
||||
Status = ZwQueryObject(WinStaDirHandle,
|
||||
ObjectBasicInformation,
|
||||
&BasicInfo,
|
||||
sizeof(BasicInfo),
|
||||
&ReturnLength);
|
||||
ok_eq_hex(Status, STATUS_SUCCESS);
|
||||
|
||||
/* \Windows is currently used */
|
||||
ok(BasicInfo.HandleCount != 0, "\\Windows is in use but HandleCount is 0!\n");
|
||||
ok(BasicInfo.PointerCount != 0, "\\Windows is in use but PointerCount is 0!\n");
|
||||
|
||||
ok_eq_ulong(BasicInfo.NameInfoSize, OBJ_WINSTA_DIRECTORY_NAME_INFO_SIZE);
|
||||
ok_eq_ulong(BasicInfo.TypeInfoSize, OBJ_DIRECTORY_TYPE_INFO_SIZE);
|
||||
|
||||
ZwClose(WinStaDirHandle);
|
||||
}
|
||||
|
||||
START_TEST(ObQuery)
|
||||
{
|
||||
ObjectBasicInformationTests();
|
||||
}
|
Loading…
Reference in a new issue