14#define KMT_PROPERTY_FMTID { 0x5F1E3C8A, 0x7D2B, 0x4E61, { 0x9A, 0x0C, 0x3B, 0x8D, 0x4F, 0x2E, 0x6A, 0x17 } }
24static const GUID KmtDiskInterface = { 0x53F56307, 0xB6BF, 0x11D0, { 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B } };
25static const GUID KmtCdromInterface = { 0x53F56308, 0xB6BF, 0x11D0, { 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B } };
26static const GUID KmtVolumeInterface = { 0x53F5630D, 0xB6BF, 0x11D0, { 0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B } };
35#define LCID_EN_US 0x0409
36#define LCID_DE_DE 0x0407
149 "%s: property data does not match\n",
Target->Description);
184 static const WCHAR String[] =
L"ReactOS property store";
185 static const WCHAR List[] =
L"First\0Second\0Third\0";
186 static const UCHAR Binary[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
187 static const ULONG Numbers[] = { 1, 2, 3 };
191 trace(
"Store round trip on %s\n",
Target->Description);
201 sizeof(Numbers), (
PVOID)Numbers);
204 (
PVOID)Numbers,
sizeof(Numbers));
260 static const WCHAR English[] =
L"Hello";
261 static const WCHAR German[] =
L"Hallo";
262 static const WCHAR Neutral[] =
L"Neutral";
263 static const WCHAR Indirect[] =
L"@machine.inf,%DeviceDesc%;Device";
266 trace(
"Legacy locales on %s\n",
Target->Description);
312 static const WCHAR English[] =
L"Hello";
313 static const WCHAR German[] =
L"Hallo";
314 static const WCHAR Neutral[] =
L"Neutral";
315 static const WCHAR Indirect[] =
L"@machine.inf,%DeviceDesc%;Device";
366 static const WCHAR Unterminated[] = {
L'a',
L'b',
L'c' };
367 static const WCHAR EmbeddedNul[] = {
L'a', 0,
L'b', 0 };
368 static const WCHAR UnterminatedList[] = {
L'a', 0,
L'b', 0 };
369 static const WCHAR DoubleNulOnly[] = { 0, 0 };
370 static const WCHAR EmptyList[] = { 0 };
371 static const WCHAR ValidString[] =
L"x";
387#define ADD_CASE(t, d, s, e) \
388 do { ASSERT(Index < RTL_NUMBER_OF(Cases)); \
389 Cases[Index].Type = (t); Cases[Index].Data = (PVOID)(d); \
390 Cases[Index].Size = (s); Cases[Index].Expected = (e); Index++; } while (0)
418 "%s case %lu (type 0x%lx, size %lu): got 0x%08lx, expected 0x%08lx\n",
435 static const WCHAR FriendlyName[] =
L"kmtest friendly name";
445 trace(
"Device builtins\n");
460 "Instance ID '%ls' does not start with enumerator '%ls'\n", Actual,
Expected);
523 sizeof(Saved), Saved, &SavedSize, &
Type);
526 "Unexpected status 0x%08lx reading the friendly name\n",
Status);
573 trace(
"Interface builtins\n");
608 trace(
"Interface parameter checks\n");
637 WCHAR NameBuffer[256];
738 static const WCHAR English[] =
L"Root";
743 trace(
"Root device\n");
754 sizeof(English), (
PVOID)English);
761 sizeof(English), (
PVOID)English);
786 if (!
skip(HaveInterfaceRoutines,
"Device interface property routines unavailable\n"))
790 "No device interface with a PnP PDO found\n"))
803 if (!
skip(!
LegacyStore,
"No builtin or protected properties before NT 6.2\n"))
809 if (!
skip(HaveInterfaceRoutines,
"Device interface property routines unavailable\n"))
static PDEVICE_OBJECT GetRootPdo(_In_ PDEVICE_OBJECT Pdo)
static const DEVPROPKEY TestKeyNumber
static PDEVICE_OBJECT ReferenceInterfacePdo(_In_ PUNICODE_STRING SymbolicLinkName)
static const DEVPROPKEY TestKeyBinary
static VOID Test_RootDevice(_In_ PDEVICE_OBJECT Pdo)
static const DEVPROPKEY TestKeyWidePid
static VOID Test_InterfaceBuiltins(_In_ PPROPERTY_TARGET Target, _In_ const GUID *InterfaceClass)
static VOID Test_DeviceBuiltins(_In_ PPROPERTY_TARGET Target)
struct _PROPERTY_TARGET PROPERTY_TARGET
static NTSTATUS SetProperty(_In_ PPROPERTY_TARGET Target, _In_ const DEVPROPKEY *Key, _In_ LCID Lcid, _In_ DEVPROPTYPE Type, _In_ ULONG Size, _In_reads_bytes_opt_(Size) PVOID Data)
static VOID Test_Locales(_In_ PPROPERTY_TARGET Target)
static const GUID KmtDiskInterface
static const DEVPROPKEY TestKeyString
static VOID ExpectNoProperty(_In_ PPROPERTY_TARGET Target, _In_ const DEVPROPKEY *Key, _In_ LCID Lcid)
static PSET_INTERFACE_PROPERTY_ROUTINE pIoSetDeviceInterfacePropertyData
static const DEVPROPKEY TestKeyList
NTSTATUS(NTAPI * PSET_INTERFACE_PROPERTY_ROUTINE)(_In_ PUNICODE_STRING SymbolicLinkName, _In_ CONST DEVPROPKEY *PropertyKey, _In_ LCID Lcid, _In_ ULONG Flags, _In_ DEVPROPTYPE Type, _In_ ULONG Size, _In_reads_bytes_opt_(Size) PVOID Data)
static VOID ExpectProperty(_In_ PPROPERTY_TARGET Target, _In_ const DEVPROPKEY *Key, _In_ LCID Lcid, _In_ DEVPROPTYPE ExpectedType, _In_reads_bytes_(ExpectedSize) PVOID ExpectedData, _In_ ULONG ExpectedSize)
static const GUID KmtVolumeInterface
static const GUID * CandidateClasses[]
NTSTATUS(NTAPI * PGET_INTERFACE_PROPERTY_ROUTINE)(_In_ PUNICODE_STRING SymbolicLinkName, _In_ CONST DEVPROPKEY *PropertyKey, _In_ LCID Lcid, _Reserved_ ULONG Flags, _In_ ULONG Size, _Out_writes_bytes_to_opt_(Size, *RequiredSize) PVOID Data, _Out_ PULONG RequiredSize, _Out_ PDEVPROPTYPE Type)
static VOID Test_InterfaceParameters(VOID)
static VOID Test_LegacyLocales(_In_ PPROPERTY_TARGET Target)
struct _PROPERTY_TARGET * PPROPERTY_TARGET
static VOID Test_Validation(_In_ PPROPERTY_TARGET Target)
static const DEVPROPKEY TestKeyLocalized
static BOOLEAN LegacyStore
static NTSTATUS GetProperty(_In_ PPROPERTY_TARGET Target, _In_ const DEVPROPKEY *Key, _In_ LCID Lcid, _In_ ULONG Size, _Out_writes_bytes_to_opt_(Size, *RequiredSize) PVOID Data, _Out_ PULONG RequiredSize, _Out_ PDEVPROPTYPE Type)
static BOOLEAN FindTestInterface(_Out_ PUNICODE_STRING SymbolicLinkName, _Out_ PDEVICE_OBJECT *Pdo, _Out_ const GUID **InterfaceClass)
static const GUID KmtCdromInterface
static VOID Test_StoreRoundTrip(_In_ PPROPERTY_TARGET Target)
static const DEVPROPKEY TestKeyInvalid
static PGET_INTERFACE_PROPERTY_ROUTINE pIoGetDeviceInterfacePropertyData
#define KMT_PROPERTY_FMTID
#define ADD_CASE(t, d, s, e)
#define ok_eq_hex(value, expected)
#define ok_eq_ulong(value, expected)
#define ok_eq_wstr(value, expected)
#define ok_eq_uint(value, expected)
#define ok_eq_int(value, expected)
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define DEVPROP_TYPE_EMPTY
#define DEVPROP_TYPEMOD_LIST
#define DEVPROP_TYPEMOD_ARRAY
#define DEVPROP_TYPE_FILETIME
#define DEVPROP_TYPE_BOOLEAN
#define DEVPROP_TYPE_GUID
#define DEVPROP_TYPE_NULL
#define DEVPROP_TYPE_UINT32
#define DEVPROP_TYPE_STRING_INDIRECT
#define DEVPROP_TYPE_STRING_LIST
#define DEVPROP_TYPE_BINARY
#define DEVPROP_TYPE_STRING
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
#define NT_SUCCESS(StatCode)
#define RTL_CONSTANT_STRING(s)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP int __cdecl _wcsnicmp(const wchar_t *, const wchar_t *, size_t)
static const WCHAR SymbolicLink[]
_Inout_opt_ PUNICODE_STRING Extension
_Must_inspect_result_ _In_opt_ PVOID _In_opt_ PVOID InstanceId
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_ PUNICODE_STRING SymbolicLinkName
_In_ UCXUSBDEVICE _In_ PDEVICE_OBJECT Pdo
#define RtlEqualMemory(dst, src, len)
PVOID KmtGetSystemRoutineAddress(IN PCWSTR RoutineName)
struct _EXTENDED_DEVOBJ_EXTENSION * PEXTENDED_DEVOBJ_EXTENSION
_In_ PMEMORY_AREA _In_ PVOID _In_ BOOLEAN _Inout_ PMM_REQUIRED_RESOURCES Required
#define _In_reads_bytes_(s)
#define _Out_writes_bytes_to_opt_(s, c)
#define _In_reads_bytes_opt_(s)
#define FILE_READ_ATTRIBUTES
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
_NullNull_terminated_ WCHAR * PZZWSTR
_In_ ULONG _In_ ULONG _In_ ULONG Length
PDEVICE_OBJECT NTAPI IoGetDeviceAttachmentBaseRef(IN PDEVICE_OBJECT DeviceObject)
NTSTATUS NTAPI IoGetDeviceObjectPointer(IN PUNICODE_STRING ObjectName, IN ACCESS_MASK DesiredAccess, OUT PFILE_OBJECT *FileObject, OUT PDEVICE_OBJECT *DeviceObject)
NTSTATUS NTAPI IoGetDeviceInterfaces(IN CONST GUID *InterfaceClassGuid, IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, IN ULONG Flags, OUT PWSTR *SymbolicLinkList)
NTSTATUS NTAPI IoGetDeviceProperty(IN PDEVICE_OBJECT DeviceObject, IN DEVICE_REGISTRY_PROPERTY DeviceProperty, IN ULONG BufferLength, OUT PVOID PropertyBuffer, OUT PULONG ResultLength)
#define RtlFillMemory(Dest, Length, Fill)
#define _WIN32_WINNT_WIN8
_In_ PSP_DEVINFO_DATA _In_ const DEVPROPKEY * PropertyKey
#define STATUS_BUFFER_TOO_SMALL
PUNICODE_STRING SymbolicLinkName
#define STATUS_ACCESS_DENIED
#define STATUS_INVALID_PARAMETER
#define STATUS_OBJECT_NAME_NOT_FOUND
_In_ PVOID _In_ LONG _In_ LONG _In_ LONG InterfaceClass
static int Link(const char **args)
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ PDEVICE_OBJECT DeviceObject
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ ULONG _Out_ PVOID _Out_ PULONG RequiredSize
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
_Must_inspect_result_ _In_ WDFCMRESLIST List
_In_opt_ PDEVICE_OBJECT _In_ ULONG _Outptr_result_nullonfailure_ _At_ * SymbolicLinkList(return==0, __drv_allocatesMem(Mem))) PZZWSTR *SymbolicLinkList
@ DevicePropertyEnumeratorName
@ DevicePropertyPhysicalDeviceObjectName
@ DevicePropertyFriendlyName
@ DevicePropertyHardwareID
#define ObDereferenceObject