8#define KMT_EMULATE_KERNEL
12#define RTL_NUMBER_OF(x) (sizeof(x) / sizeof(x[0]))
47 "Call number %lu, expected only %lu\n",
85#define CONST_STR_AND_LEN(d) { (d), sizeof(d) }
86#define CSAL CONST_STR_AND_LEN
91#define DEFAULT_DIFFERS 8
98 ULONG DefaultExpectedCount;
99 STR_AND_LEN DefaultExpected[20];
108 {
CSAL(
L"String\0"), 1, {
CSAL(
L"String") } },
110 {
CSAL(
L"String1\0String2\0"), 2, {
CSAL(
L"String1"),
CSAL(
L"String2") } },
116#define DO_QUERY(ExpectedArray, ExpectedCount) do \
119 ULONG _ExpectedCount = (ExpectedCount); \
120 for (_i = 0; _i < _ExpectedCount; _i++) \
122 Expected.Values[_i].ValueName = ValueName.Buffer; \
123 Expected.Values[_i].ValueType = REG_SZ; \
124 Expected.Values[_i].ValueData = (ExpectedArray)[_i].Str; \
125 Expected.Values[_i].ValueLength = (ExpectedArray)[_i].Len; \
127 Expected.CurrentIndex = 0; \
128 Expected.Count = _ExpectedCount; \
129 if (_ExpectedCount == 1) \
130 QueryTable[0].EntryContext = &Expected.Values[0]; \
132 QueryTable[0].EntryContext = NULL; \
133 Status = RtlQueryRegistryValues(RTL_REGISTRY_HANDLE, \
138 ok_eq_hex(Status, STATUS_SUCCESS); \
139 ok_eq_ulong(Expected.CurrentIndex, Expected.Count); \
145 for (
i = 0;
i < TestCount;
i++)
162 "ZwDeleteValueKey returned %lx\n",
Status);
167 for (
i = 0;
i < TestCount;
i++)
171 trace(
"Default: %lu\n",
i);
182 for (
i = 0;
i < TestCount;
i++)
212 Status = ZwOpenKey(&SoftwareHandle,
static NTSTATUS NTAPI QueryRoutine(_In_ PWSTR ValueName, _In_ ULONG ValueType, _In_ PVOID ValueData, _In_ ULONG ValueLength, _In_ PVOID Context, _In_ PVOID EntryContext)
struct EXPECTED_VALUES * PEXPECTED_VALUES
#define DO_QUERY(ExpectedArray, ExpectedCount)
struct EXPECTED_VALUE * PEXPECTED_VALUE
static VOID TestRtlQueryRegistryValues(_In_ HANDLE KeyHandle)
#define ok_eq_pointer(value, expected)
#define ok_eq_hex(value, expected)
#define ok_eq_ulong(value, expected)
#define ok_eq_wstr(value, expected)
#define ok_eq_size(value, expected)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
#define NT_SUCCESS(StatCode)
#define RtlCompareMemory(s1, s2, l)
NTSYSAPI NTSTATUS NTAPI ZwDeleteValueKey(__in IN HANDLE Key, __in IN PUNICODE_STRING ValueName)
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
_In_ GUID _In_ PVOID ValueData
#define OBJ_KERNEL_HANDLE
#define OBJ_CASE_INSENSITIVE
#define InitializeObjectAttributes(p, n, a, r, s)
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
_In_ PCWSTR _Inout_ _At_ QueryTable EntryContext
_In_ PCWSTR _Inout_ _At_ QueryTable _Pre_unknown_ PRTL_QUERY_REGISTRY_TABLE QueryTable
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define KEY_CREATE_SUB_KEY
#define REG_OPTION_VOLATILE
EXPECTED_VALUE Values[20]
#define RTL_CONSTANT_STRING(s)
#define STATUS_OBJECT_NAME_NOT_FOUND
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _In_ ULONG _Out_opt_ PULONG _Out_opt_ PULONG ValueType
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING ValueName
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _In_ ULONG ValueLength
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
_Must_inspect_result_ _In_ ULONG Flags