ReactOS 0.4.17-dev-1133-gc25e4fd
IoDeviceProperty.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS kernel mode tests
3 * LICENSE: MIT (https://spdx.org/licenses/MIT)
4 * PURPOSE: Test for the DEVPROPKEY device and device interface property functions
5 * COPYRIGHT: Copyright 2026 Justin Miller <justin.miller@reactos.org>
6 */
7
8#include <kmt_test.h>
9#include <devpkey.h>
10
11#define NDEBUG
12#include <debug.h>
13
14#define KMT_PROPERTY_FMTID { 0x5F1E3C8A, 0x7D2B, 0x4E61, { 0x9A, 0x0C, 0x3B, 0x8D, 0x4F, 0x2E, 0x6A, 0x17 } }
15
21static const DEVPROPKEY TestKeyWidePid = { KMT_PROPERTY_FMTID, 0x12345 };
23
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 } };
27
28static const GUID* CandidateClasses[] =
29{
33};
34
35#define LCID_EN_US 0x0409
36#define LCID_DE_DE 0x0407
37
38typedef struct _PROPERTY_TARGET
39{
44
45typedef
55
56typedef
67
68/* Only exported on NT 6.2+ */
71
72/* NT 6.0 and 6.1 keep a raw registry store with no type checks or builtin keys */
74
75static
79 _In_ const DEVPROPKEY *Key,
84{
85 if (Target->Pdo)
86 return IoSetDevicePropertyData(Target->Pdo, Key, Lcid, 0, Type, Size, Data);
87
88 return pIoSetDeviceInterfacePropertyData(Target->SymbolicLinkName, Key, Lcid, 0, Type, Size, Data);
89}
90
91static
95 _In_ const DEVPROPKEY *Key,
101{
102 if (Target->Pdo)
103 return IoGetDevicePropertyData(Target->Pdo, Key, Lcid, 0, Size, Data, RequiredSize, Type);
104
105 return pIoGetDeviceInterfacePropertyData(Target->SymbolicLinkName, Key, Lcid, 0, Size, Data, RequiredSize, Type);
106}
107
108static
109VOID
112 _In_ const DEVPROPKEY *Key,
113 _In_ LCID Lcid,
114 _In_ DEVPROPTYPE ExpectedType,
115 _In_reads_bytes_(ExpectedSize) PVOID ExpectedData,
116 _In_ ULONG ExpectedSize)
117{
118 UCHAR Buffer[128];
122
123 ASSERT(ExpectedSize < sizeof(Buffer));
124
125 Required = 0x55555555;
126 Type = 0x55555555;
129 ok_eq_ulong(Required, ExpectedSize);
130 ok_eq_hex(Type, ExpectedType);
131
132 if (ExpectedSize)
133 {
134 RtlFillMemory(Buffer, sizeof(Buffer), 0xAA);
135 Status = GetProperty(Target, Key, Lcid, ExpectedSize - 1, Buffer, &Required, &Type);
137 ok_eq_ulong(Required, ExpectedSize);
138 ok_eq_uint(Buffer[0], 0xAA);
139 }
140
141 RtlFillMemory(Buffer, sizeof(Buffer), 0xAA);
142 Required = 0x55555555;
143 Type = 0x55555555;
146 ok_eq_ulong(Required, ExpectedSize);
147 ok_eq_hex(Type, ExpectedType);
148 ok(RtlEqualMemory(Buffer, ExpectedData, ExpectedSize),
149 "%s: property data does not match\n", Target->Description);
150 ok_eq_uint(Buffer[ExpectedSize], 0xAA);
151}
152
153static
154VOID
157 _In_ const DEVPROPKEY *Key,
158 _In_ LCID Lcid)
159{
160 UCHAR Buffer[16];
161 ULONG Required = 0x55555555;
162 DEVPROPTYPE Type = 0x55555555;
164
167 if (LegacyStore)
168 {
169 ok_eq_ulong(Required, 0x55555555UL);
170 ok_eq_hex(Type, 0x55555555UL);
171 }
172 else
173 {
176 }
177}
178
179static
180VOID
183{
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 };
188 ULONG Number = 0x12345678;
190
191 trace("Store round trip on %s\n", Target->Description);
192
195
199
201 sizeof(Numbers), (PVOID)Numbers);
204 (PVOID)Numbers, sizeof(Numbers));
205
209
213
217
221
225
229
232
235 if (LegacyStore)
236 {
237 /* Only a NULL buffer deletes, the empty type gets stored as is */
241 }
243
253}
254
255static
256VOID
259{
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";
265
266 trace("Legacy locales on %s\n", Target->Description);
267
273
278
279 /* A neutral write replaces every localized value and lookups fall back to it */
285
288
293
297
305}
306
307static
308VOID
311{
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";
317
318 if (LegacyStore)
319 {
321 return;
322 }
323
324 trace("Locales on %s\n", Target->Description);
325
331
336
340
346
352
359}
360
361static
362VOID
365{
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";
372 struct
373 {
375 PVOID Data;
376 ULONG Size;
378 } Cases[16];
379 UCHAR BadBoolean = 1, GoodBoolean = (UCHAR)DEVPROP_TRUE;
380 LARGE_INTEGER NegativeTime = { .QuadPart = -1 };
381 ULONG Number = 5;
382 ULONG Index = 0, i;
384
385 trace("Validation on %s\n", Target->Description);
386
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)
391
392 ADD_CASE(DEVPROP_TYPE_STRING, Unterminated, sizeof(Unterminated), STATUS_INVALID_PARAMETER);
393 ADD_CASE(DEVPROP_TYPE_STRING, EmbeddedNul, sizeof(EmbeddedNul), STATUS_INVALID_PARAMETER);
395 ADD_CASE(DEVPROP_TYPE_STRING_LIST, UnterminatedList, sizeof(UnterminatedList), STATUS_INVALID_PARAMETER);
396 ADD_CASE(DEVPROP_TYPE_STRING_LIST, DoubleNulOnly, sizeof(DoubleNulOnly), STATUS_INVALID_PARAMETER);
397 ADD_CASE(DEVPROP_TYPE_STRING_LIST, EmptyList, sizeof(EmptyList), STATUS_SUCCESS);
399 ADD_CASE(DEVPROP_TYPE_BOOLEAN, &BadBoolean, sizeof(BadBoolean), STATUS_INVALID_PARAMETER);
400 ADD_CASE(DEVPROP_TYPE_BOOLEAN, &GoodBoolean, sizeof(GoodBoolean), STATUS_SUCCESS);
401 ADD_CASE(DEVPROP_TYPE_FILETIME, &NegativeTime, sizeof(NegativeTime), STATUS_INVALID_PARAMETER);
408
409#undef ADD_CASE
410
411 for (i = 0; i < Index; i++)
412 {
413 /* The legacy store takes any type and size as is */
414 Expected = LegacyStore ? STATUS_SUCCESS : Cases[i].Expected;
415
416 Status = SetProperty(Target, &TestKeyInvalid, LOCALE_NEUTRAL, Cases[i].Type, Cases[i].Size, Cases[i].Data);
417 ok(Status == Expected,
418 "%s case %lu (type 0x%lx, size %lu): got 0x%08lx, expected 0x%08lx\n",
419 Target->Description, i, Cases[i].Type, Cases[i].Size, Status, Expected);
420
421 if (NT_SUCCESS(Expected))
422 ExpectProperty(Target, &TestKeyInvalid, LOCALE_NEUTRAL, Cases[i].Type, Cases[i].Data, Cases[i].Size);
423 else
425
427 }
428}
429
430static
431VOID
434{
435 static const WCHAR FriendlyName[] = L"kmtest friendly name";
436 static UNICODE_STRING PnpManagerName = RTL_CONSTANT_STRING(L"\\Driver\\PnpManager");
437 WCHAR Expected[512], Actual[512], Saved[512];
438 ULONG ExpectedLength, Required, SavedSize = 0;
440 DEVPROP_BOOLEAN Boolean;
441 BOOLEAN HadFriendlyName;
444
445 trace("Device builtins\n");
446
448 sizeof(Expected), Expected, &ExpectedLength);
450 Status = GetProperty(Target, &DEVPKEY_Device_InstanceId, LOCALE_NEUTRAL,
451 sizeof(Actual), Actual, &Required, &Type);
454 if (NT_SUCCESS(Status))
455 {
456 SIZE_T EnumeratorChars = wcslen(Expected);
457
458 ok_eq_ulong(Required, (ULONG)((wcslen(Actual) + 1) * sizeof(WCHAR)));
459 ok(!_wcsnicmp(Actual, Expected, EnumeratorChars) && (Actual[EnumeratorChars] == L'\\'),
460 "Instance ID '%ls' does not start with enumerator '%ls'\n", Actual, Expected);
461 }
462
464 sizeof(Expected), Expected, &ExpectedLength);
466 Status = GetProperty(Target, &DEVPKEY_Device_PDOName, LOCALE_NEUTRAL,
467 sizeof(Actual), Actual, &Required, &Type);
470 if (NT_SUCCESS(Status))
471 ok_eq_wstr(Actual, Expected);
472
474 sizeof(Expected), Expected, &ExpectedLength);
475 if (!skip(NT_SUCCESS(Status), "No hardware IDs: 0x%08lx\n", Status))
476 {
477 Status = GetProperty(Target, &DEVPKEY_Device_HardwareIds, LOCALE_NEUTRAL,
478 sizeof(Actual), Actual, &Required, &Type);
481 if (NT_SUCCESS(Status))
482 ok_eq_wstr(Actual, Expected);
483
484 if (!RtlEqualUnicodeString(&Target->Pdo->DriverObject->DriverName, &PnpManagerName, TRUE))
485 {
486 Status = SetProperty(Target, &DEVPKEY_Device_HardwareIds, LOCALE_NEUTRAL,
489 }
490 }
491
492 Status = GetProperty(Target, &DEVPKEY_Device_DevNodeStatus, LOCALE_NEUTRAL,
493 sizeof(Number), &Number, &Required, &Type);
496 ok_eq_ulong(Required, (ULONG)sizeof(Number));
497
498 Status = GetProperty(Target, &DEVPKEY_Device_ProblemCode, LOCALE_NEUTRAL,
499 sizeof(Number), &Number, &Required, &Type);
502
503 Boolean = 0x55;
504 Status = GetProperty(Target, &DEVPKEY_Device_IsPresent, LOCALE_NEUTRAL,
505 sizeof(Boolean), &Boolean, &Required, &Type);
508 ok_eq_int(Boolean, DEVPROP_TRUE);
509
510 Status = GetProperty(Target, &DEVPKEY_Device_Parent, LOCALE_NEUTRAL,
511 sizeof(Actual), Actual, &Required, &Type);
514
515 Status = SetProperty(Target, &DEVPKEY_Device_InstanceId, LOCALE_NEUTRAL,
516 DEVPROP_TYPE_STRING, sizeof(FriendlyName), (PVOID)FriendlyName);
518 Status = SetProperty(Target, &DEVPKEY_Device_PDOName, LOCALE_NEUTRAL,
519 DEVPROP_TYPE_STRING, sizeof(FriendlyName), (PVOID)FriendlyName);
521
522 Status = GetProperty(Target, &DEVPKEY_Device_FriendlyName, LOCALE_NEUTRAL,
523 sizeof(Saved), Saved, &SavedSize, &Type);
524 HadFriendlyName = NT_SUCCESS(Status);
525 ok(HadFriendlyName || (Status == STATUS_OBJECT_NAME_NOT_FOUND),
526 "Unexpected status 0x%08lx reading the friendly name\n", Status);
527
528 Status = SetProperty(Target, &DEVPKEY_Device_FriendlyName, LOCALE_NEUTRAL,
529 DEVPROP_TYPE_STRING, sizeof(FriendlyName), (PVOID)FriendlyName);
531 ExpectProperty(Target, &DEVPKEY_Device_FriendlyName, LOCALE_NEUTRAL,
532 DEVPROP_TYPE_STRING, (PVOID)FriendlyName, sizeof(FriendlyName));
533
535 sizeof(Expected), Expected, &ExpectedLength);
537 if (NT_SUCCESS(Status))
538 ok_eq_wstr(Expected, FriendlyName);
539
540 Number = 1;
541 Status = SetProperty(Target, &DEVPKEY_Device_FriendlyName, LOCALE_NEUTRAL,
544
545 if (HadFriendlyName)
546 {
547 Status = SetProperty(Target, &DEVPKEY_Device_FriendlyName, LOCALE_NEUTRAL,
548 DEVPROP_TYPE_STRING, SavedSize, Saved);
550 }
551 else
552 {
553 Status = SetProperty(Target, &DEVPKEY_Device_FriendlyName, LOCALE_NEUTRAL,
556 ExpectNoProperty(Target, &DEVPKEY_Device_FriendlyName, LOCALE_NEUTRAL);
557 }
558}
559
560static
561VOID
564 _In_ const GUID *InterfaceClass)
565{
567 WCHAR InstanceId[256];
570 GUID ClassGuid;
572
573 trace("Interface builtins\n");
574
575 Status = GetProperty(Target, &DEVPKEY_DeviceInterface_ClassGuid, LOCALE_NEUTRAL,
576 sizeof(ClassGuid), &ClassGuid, &Required, &Type);
579 ok_eq_ulong(Required, (ULONG)sizeof(GUID));
580 ok(RtlEqualMemory(&ClassGuid, InterfaceClass, sizeof(GUID)), "Wrong interface class\n");
581
582 Status = GetProperty(Target, &DEVPKEY_DeviceInterface_Enabled, LOCALE_NEUTRAL,
583 sizeof(Enabled), &Enabled, &Required, &Type);
587
588 Status = GetProperty(Target, &DEVPKEY_Device_InstanceId, LOCALE_NEUTRAL,
589 sizeof(InstanceId), InstanceId, &Required, &Type);
592
593 Status = SetProperty(Target, &DEVPKEY_DeviceInterface_ClassGuid, LOCALE_NEUTRAL,
594 DEVPROP_TYPE_GUID, sizeof(ClassGuid), &ClassGuid);
596}
597
598static
599VOID
601{
602 UNICODE_STRING EmptyName = RTL_CONSTANT_STRING(L"");
603 UNICODE_STRING MissingName = RTL_CONSTANT_STRING(L"\\??\\KMTEST#NoSuchDevice#0#{5F1E3C8A-7D2B-4E61-9A0C-3B8D4F2E6A17}");
604 ULONG Number = 1, Required;
607
608 trace("Interface parameter checks\n");
609
614 sizeof(Number), &Number, &Required, &Type);
616
621 sizeof(Number), &Number, &Required, &Type);
623
626 ok(!NT_SUCCESS(Status), "Setting a property of a missing interface returned 0x%08lx\n", Status);
628 sizeof(Number), &Number, &Required, &Type);
629 ok(!NT_SUCCESS(Status), "Getting a property of a missing interface returned 0x%08lx\n", Status);
630}
631
632static
636{
637 WCHAR NameBuffer[256];
638 PDEVICE_OBJECT TopDevice, DeviceObject;
642
645 &FileObject,
646 &TopDevice);
647 if (!NT_SUCCESS(Status))
648 {
649 trace("Cannot open %wZ, status 0x%08lx\n", SymbolicLinkName, Status);
650 return NULL;
651 }
652
655
658 sizeof(NameBuffer),
659 NameBuffer,
660 &Length);
662 {
664 return NULL;
665 }
666
667 return DeviceObject;
668}
669
670static
675 _Out_ const GUID **InterfaceClass)
676{
680 ULONG i;
682
683 for (i = 0; i < RTL_NUMBER_OF(CandidateClasses); i++)
684 {
686 if (!NT_SUCCESS(Status))
687 continue;
688
692 {
694
696 if (!*Pdo)
697 continue;
698
700 {
702 continue;
703 }
704
707 return TRUE;
708 }
709
711 }
712
713 return FALSE;
714}
715
716static
720{
722 PDEVICE_NODE DeviceNode = Extension->DeviceNode;
723
724 if (!DeviceNode)
725 return NULL;
726
727 while (DeviceNode->Parent)
728 DeviceNode = DeviceNode->Parent;
729
730 return DeviceNode->PhysicalDeviceObject;
731}
732
733static
734VOID
737{
738 static const WCHAR English[] = L"Root";
739 PROPERTY_TARGET Target = { "root", NULL, NULL };
740 ULONG Number = 1;
742
743 trace("Root device\n");
744
745 Target.Pdo = GetRootPdo(Pdo);
746 if (skip(Target.Pdo != NULL, "No root device\n"))
747 return;
748
752
753 Status = SetProperty(&Target, &DEVPKEY_Device_FriendlyName, LOCALE_NEUTRAL, DEVPROP_TYPE_STRING,
754 sizeof(English), (PVOID)English);
756
759
761 sizeof(English), (PVOID)English);
765
769}
770
771START_TEST(IoDeviceProperty)
772{
773 PROPERTY_TARGET DeviceTarget = { "device", NULL, NULL };
774 PROPERTY_TARGET InterfaceTarget = { "interface", NULL, NULL };
776 const GUID *InterfaceClass;
778 BOOLEAN HaveInterfaceRoutines;
779
781
782 pIoSetDeviceInterfacePropertyData = KmtGetSystemRoutineAddress(L"IoSetDeviceInterfacePropertyData");
783 pIoGetDeviceInterfacePropertyData = KmtGetSystemRoutineAddress(L"IoGetDeviceInterfacePropertyData");
785
786 if (!skip(HaveInterfaceRoutines, "Device interface property routines unavailable\n"))
788
790 "No device interface with a PnP PDO found\n"))
791 {
792 return;
793 }
794
795 trace("Using %wZ\n", &SymbolicLinkName);
796
797 DeviceTarget.Pdo = Pdo;
798 InterfaceTarget.SymbolicLinkName = &SymbolicLinkName;
799
800 Test_StoreRoundTrip(&DeviceTarget);
801 Test_Locales(&DeviceTarget);
802 Test_Validation(&DeviceTarget);
803 if (!skip(!LegacyStore, "No builtin or protected properties before NT 6.2\n"))
804 {
805 Test_DeviceBuiltins(&DeviceTarget);
807 }
808
809 if (!skip(HaveInterfaceRoutines, "Device interface property routines unavailable\n"))
810 {
811 Test_StoreRoundTrip(&InterfaceTarget);
812 Test_Locales(&InterfaceTarget);
813 Test_Validation(&InterfaceTarget);
814 Test_InterfaceBuiltins(&InterfaceTarget, InterfaceClass);
815 }
816
819}
BOOLEAN Expected
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)
#define LCID_DE_DE
static const DEVPROPKEY TestKeyInvalid
static PGET_INTERFACE_PROPERTY_ROUTINE pIoGetDeviceInterfacePropertyData
#define KMT_PROPERTY_FMTID
#define ADD_CASE(t, d, s, e)
#define LCID_EN_US
@ DeviceNode
Definition: Node.h:9
#define RTL_NUMBER_OF(x)
Definition: RtlRegistry.c:12
Type
Definition: Type.h:7
unsigned char BOOLEAN
Definition: actypes.h:127
#define ok_eq_hex(value, expected)
Definition: apitest.h:136
#define ok_eq_ulong(value, expected)
Definition: apitest.h:122
#define GetNTVersion()
Definition: apitest.h:17
#define ok_eq_wstr(value, expected)
Definition: apitest.h:143
#define ok_eq_uint(value, expected)
Definition: apitest.h:120
#define ok_eq_int(value, expected)
Definition: apitest.h:119
#define trace
Definition: atltest.h:70
#define ok(value,...)
Definition: atltest.h:57
#define skip(...)
Definition: atltest.h:64
#define START_TEST(x)
Definition: atltest.h:75
LONG NTSTATUS
Definition: precomp.h:26
Definition: bufpool.h:45
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
ULONG DEVPROPTYPE
Definition: devpropdef.h:24
CHAR DEVPROP_BOOLEAN
Definition: devpropdef.h:64
#define DEVPROP_TYPE_EMPTY
Definition: devpropdef.h:29
#define MAX_DEVPROP_TYPE
Definition: devpropdef.h:58
ULONG * PDEVPROPTYPE
Definition: devpropdef.h:24
#define DEVPROP_TYPEMOD_LIST
Definition: devpropdef.h:27
#define DEVPROP_TYPEMOD_ARRAY
Definition: devpropdef.h:26
#define DEVPROP_TYPE_FILETIME
Definition: devpropdef.h:45
#define DEVPROP_TYPE_BOOLEAN
Definition: devpropdef.h:46
#define DEVPROP_TYPE_GUID
Definition: devpropdef.h:42
#define DEVPROP_TYPE_NULL
Definition: devpropdef.h:30
#define DEVPROP_TYPE_UINT32
Definition: devpropdef.h:36
#define DEVPROP_TYPE_STRING_INDIRECT
Definition: devpropdef.h:56
#define DEVPROP_TYPE_STRING_LIST
Definition: devpropdef.h:48
#define DEVPROP_TYPE_BINARY
Definition: devpropdef.h:53
#define DEVPROP_TRUE
Definition: devpropdef.h:66
#define DEVPROP_TYPE_STRING
Definition: devpropdef.h:47
_In_ D3DDDI_VIDEO_PRESENT_TARGET_ID _In_ ULONG _In_ ULONG Flags
Definition: dispmprt.h:245
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define NTSTATUS
Definition: precomp.h:19
#define RTL_CONSTANT_STRING(s)
Definition: combase.c:35
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2988
_ACRTIMP int __cdecl _wcsnicmp(const wchar_t *, const wchar_t *, size_t)
Definition: wcs.c:200
static const WCHAR SymbolicLink[]
Definition: interface.c:31
#define L(x)
Definition: resources.c:13
#define ExFreePool(addr)
Definition: env_spec_w32.h:352
_Inout_opt_ PUNICODE_STRING Extension
Definition: fltkernel.h:1092
_Must_inspect_result_ _In_opt_ PVOID _In_opt_ PVOID InstanceId
Definition: fsrtlfuncs.h:908
Status
Definition: gdiplustypes.h:24
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
Definition: glfuncs.h:248
_In_ PUNICODE_STRING SymbolicLinkName
Definition: hubucx.h:491
_In_ UCXUSBDEVICE _In_ PDEVICE_OBJECT Pdo
Definition: hubucx.h:280
#define RtlEqualMemory(dst, src, len)
Definition: kdvm.h:18
#define is_reactos()
Definition: kmt_test.h:534
PVOID KmtGetSystemRoutineAddress(IN PCWSTR RoutineName)
if(dx< 0)
Definition: linetemp.h:194
#define ASSERT(a)
Definition: mode.c:44
@ Enabled
Definition: mountmgr.h:179
_In_ ULONG Number
Definition: haltypes.h:1940
struct _EXTENDED_DEVOBJ_EXTENSION * PEXTENDED_DEVOBJ_EXTENSION
_Out_ PLCID Lcid
Definition: rtlfuncs.h:5207
_In_ PMEMORY_AREA _In_ PVOID _In_ BOOLEAN _Inout_ PMM_REQUIRED_RESOURCES Required
Definition: newmm.h:210
#define _In_reads_bytes_(s)
Definition: no_sal2.h:170
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define _Out_writes_bytes_to_opt_(s, c)
Definition: no_sal2.h:240
#define _Reserved_
Definition: no_sal2.h:504
#define _In_reads_bytes_opt_(s)
Definition: no_sal2.h:224
#define FILE_READ_ATTRIBUTES
Definition: nt_native.h:647
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)
#define LOCALE_NEUTRAL
#define UNICODE_NULL
_NullNull_terminated_ WCHAR * PZZWSTR
Definition: ntbasedef.h:432
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
PDEVICE_OBJECT NTAPI IoGetDeviceAttachmentBaseRef(IN PDEVICE_OBJECT DeviceObject)
Definition: device.c:1434
NTSTATUS NTAPI IoGetDeviceObjectPointer(IN PUNICODE_STRING ObjectName, IN ACCESS_MASK DesiredAccess, OUT PFILE_OBJECT *FileObject, OUT PDEVICE_OBJECT *DeviceObject)
Definition: device.c:1455
NTSTATUS NTAPI IoGetDeviceInterfaces(IN CONST GUID *InterfaceClassGuid, IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, IN ULONG Flags, OUT PWSTR *SymbolicLinkList)
Definition: deviface.c:950
#define CONST
Definition: pedump.c:81
short WCHAR
Definition: pedump.c:58
NTSTATUS NTAPI IoGetDeviceProperty(IN PDEVICE_OBJECT DeviceObject, IN DEVICE_REGISTRY_PROPERTY DeviceProperty, IN ULONG BufferLength, OUT PVOID PropertyBuffer, OUT PULONG ResultLength)
Definition: pnpmgr.c:1382
#define RtlFillMemory(Dest, Length, Fill)
Definition: winternl.h:603
DWORD LCID
Definition: nls.h:13
@ Binary
Definition: stream.h:45
#define _WIN32_WINNT_WIN8
Definition: sdkddkver.h:29
_In_ PSP_DEVINFO_DATA _In_ const DEVPROPKEY * PropertyKey
Definition: setupapi.h:1667
#define STATUS_SUCCESS
Definition: shellext.h:65
#define STATUS_BUFFER_TOO_SMALL
Definition: shellext.h:69
PUNICODE_STRING SymbolicLinkName
PDEVICE_OBJECT Pdo
#define UL
Definition: tui.h:165
uint16_t * PWSTR
Definition: typedefs.h:56
uint32_t * PULONG
Definition: typedefs.h:59
unsigned char UCHAR
Definition: typedefs.h:53
#define NTAPI
Definition: typedefs.h:36
ULONG_PTR SIZE_T
Definition: typedefs.h:80
const char * PCSTR
Definition: typedefs.h:52
uint32_t ULONG
Definition: typedefs.h:59
#define STATUS_ACCESS_DENIED
Definition: udferr_usr.h:145
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
#define STATUS_OBJECT_NAME_NOT_FOUND
Definition: udferr_usr.h:149
LONGLONG QuadPart
Definition: typedefs.h:114
_In_ PVOID _In_ LONG _In_ LONG _In_ LONG InterfaceClass
Definition: usbdlib.h:198
static int Link(const char **args)
Definition: vfdcmd.c:2414
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2061
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
Definition: wdfdevice.h:550
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4539
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ ULONG _Out_ PVOID _Out_ PULONG RequiredSize
Definition: wdfdevice.h:4445
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2439
_In_ WDFIOTARGET Target
Definition: wdfrequest.h:306
_Must_inspect_result_ _In_ WDFCMRESLIST List
Definition: wdfresource.h:550
_In_opt_ PDEVICE_OBJECT _In_ ULONG _Outptr_result_nullonfailure_ _At_ * SymbolicLinkList(return==0, __drv_allocatesMem(Mem))) PZZWSTR *SymbolicLinkList
@ DevicePropertyEnumeratorName
Definition: iotypes.h:1210
@ DevicePropertyPhysicalDeviceObjectName
Definition: iotypes.h:1206
@ DevicePropertyFriendlyName
Definition: iotypes.h:1204
@ DevicePropertyHardwareID
Definition: iotypes.h:1196
* PFILE_OBJECT
Definition: iotypes.h:1998
#define ObDereferenceObject
Definition: obfuncs.h:203