ReactOS 0.4.17-dev-116-ga4b6fe9
RtlQueryEnvironmentVariable_U.c File Reference
#include "precomp.h"
Include dependency graph for RtlQueryEnvironmentVariable_U.c:

Go to the source code of this file.

Functions

 START_TEST (RtlQueryEnvironmentVariable_U)
 

Function Documentation

◆ START_TEST()

Definition at line 10 of file RtlQueryEnvironmentVariable_U.c.

11{
12 static WCHAR TestEnvironment[] = L"TestVar=TestVal\0Foo=4\0EmptyVar\0Bar=8\0\0";
13 WCHAR Buffer[32];
14 UNICODE_STRING NameString, ValueString;
16
17 /* Query the TestVar environment variable length */
18 RtlInitUnicodeString(&NameString, L"TestVar");
19 RtlInitEmptyUnicodeString(&ValueString, NULL, 0);
20 Status = RtlQueryEnvironmentVariable_U(TestEnvironment, &NameString, &ValueString);
22 ok_eq_pointer(ValueString.Buffer, NULL);
23 ok_eq_ulong(ValueString.Length, 7 * sizeof(WCHAR));
24 ok_eq_ulong(ValueString.MaximumLength, 0);
25
26 /* Test passing an empty sized buffer */
27 memset(Buffer, 0xAB, sizeof(Buffer));
28 RtlInitEmptyUnicodeString(&ValueString, Buffer, 0);
29 Status = RtlQueryEnvironmentVariable_U(TestEnvironment, &NameString, &ValueString);
31 ok_eq_pointer(ValueString.Buffer, Buffer);
32 ok_eq_ulong(ValueString.Length, 7 * sizeof(WCHAR));
33 ok_eq_ulong(ValueString.MaximumLength, 0);
34 ok_eq_wchar(Buffer[0], 0xABAB);
35
36 /* Test a buffer size that is too small */
37 memset(Buffer, 0xAB, sizeof(Buffer));
38 RtlInitEmptyUnicodeString(&ValueString, Buffer, 2 * sizeof(WCHAR));
39 Status = RtlQueryEnvironmentVariable_U(TestEnvironment, &NameString, &ValueString);
41 ok_eq_pointer(ValueString.Buffer, Buffer);
42 ok_eq_ulong(ValueString.Length, 7 * sizeof(WCHAR));
43 ok_eq_ulong(ValueString.MaximumLength, 2 * sizeof(WCHAR));
44 ok(Buffer[0] == UNICODE_NULL || broken(/* Windows 2003 */ Buffer[0] == 0xABAB), "Buffer[0] = 0x%x\n", Buffer[0]);
45 ok_eq_wchar(Buffer[1], 0xABAB);
46
47 /* Test a buffer size that doesn't fit the terminating NULL char */
48 memset(Buffer, 0xAB, sizeof(Buffer));
49 RtlInitEmptyUnicodeString(&ValueString, Buffer, 7 * sizeof(WCHAR));
50 Status = RtlQueryEnvironmentVariable_U(TestEnvironment, &NameString, &ValueString);
51 ok(Status == STATUS_BUFFER_TOO_SMALL || broken(/* Windows 2003 */ Status == STATUS_SUCCESS), "Status = 0x%lx\n", Status);
52 ok_eq_pointer(ValueString.Buffer, Buffer);
53 ok_eq_ulong(ValueString.Length, 7 * sizeof(WCHAR));
54 ok_eq_ulong(ValueString.MaximumLength, 7 * sizeof(WCHAR));
56 {
58 ok_eq_wchar(Buffer[1], 0xABAB);
59 }
60
61 /* Test a buffer size that is just large enough */
62 memset(Buffer, 0xAB, sizeof(Buffer));
63 RtlInitEmptyUnicodeString(&ValueString, Buffer, 8 * sizeof(WCHAR));
64 Status = RtlQueryEnvironmentVariable_U(TestEnvironment, &NameString, &ValueString);
66 ok_eq_pointer(ValueString.Buffer, Buffer);
67 ok_eq_ulong(ValueString.Length, 7 * sizeof(WCHAR));
68 ok_eq_ulong(ValueString.MaximumLength, 8 * sizeof(WCHAR));
69 ok_eq_wstr(Buffer, L"TestVal");
71 ok_eq_wchar(Buffer[8], 0xABAB);
72
73 /* Test a buffer size that is larger than needed */
74 memset(Buffer, 0xAB, sizeof(Buffer));
75 RtlInitEmptyUnicodeString(&ValueString, Buffer, sizeof(Buffer));
76 Status = RtlQueryEnvironmentVariable_U(TestEnvironment, &NameString, &ValueString);
78 ok_eq_pointer(ValueString.Buffer, Buffer);
79 ok_eq_ulong(ValueString.Length, 7 * sizeof(WCHAR));
80 ok_eq_ulong(ValueString.MaximumLength, sizeof(Buffer));
81 ok_eq_wstr(Buffer, L"TestVal");
83 ok_eq_wchar(Buffer[8], 0xABAB);
84
85 /* Test a too big variable Length */
86 memset(Buffer, 0xAB, sizeof(Buffer));
87 NameString.Length += sizeof(WCHAR);
88 RtlInitEmptyUnicodeString(&ValueString, Buffer, sizeof(Buffer));
89 Status = RtlQueryEnvironmentVariable_U(TestEnvironment, &NameString, &ValueString);
91 ok_eq_wchar(Buffer[0], 0xABAB);
92
93 /* Query the EmptyVar environment variable */
94 memset(Buffer, 0xAB, sizeof(Buffer));
95 RtlInitUnicodeString(&NameString, L"EmptyVar");
96 RtlInitEmptyUnicodeString(&ValueString, Buffer, sizeof(Buffer));
97 Status = RtlQueryEnvironmentVariable_U(TestEnvironment, &NameString, &ValueString);
99 ok_eq_pointer(ValueString.Buffer, Buffer);
100 ok_eq_ulong(ValueString.Length, 0);
101 ok_eq_ulong(ValueString.MaximumLength, sizeof(Buffer));
102 ok_eq_wchar(Buffer[0], 0xABAB);
103
104 /* Query the Bar environment variable */
105 memset(Buffer, 0xAB, sizeof(Buffer));
106 RtlInitUnicodeString(&NameString, L"Bar");
107 RtlInitEmptyUnicodeString(&ValueString, Buffer, sizeof(Buffer));
108 Status = RtlQueryEnvironmentVariable_U(TestEnvironment, &NameString, &ValueString);
110 ok_eq_pointer(ValueString.Buffer, Buffer);
111 ok_eq_ulong(ValueString.Length, 1 * sizeof(WCHAR));
112 ok_eq_ulong(ValueString.MaximumLength, sizeof(Buffer));
113 ok_eq_wstr(Buffer, L"8");
115 ok_eq_wchar(Buffer[2], 0xABAB);
116
117 /* Test NULL Variable name */
118 memset(Buffer, 0xAB, sizeof(Buffer));
119 RtlInitEmptyUnicodeString(&NameString, NULL, 0);
120 RtlInitEmptyUnicodeString(&ValueString, Buffer, sizeof(Buffer));
121 Status = RtlQueryEnvironmentVariable_U(TestEnvironment, &NameString, &ValueString);
123 ok_eq_pointer(ValueString.Buffer, Buffer);
124 ok_eq_ulong(ValueString.Length, 0);
125 ok_eq_ulong(ValueString.MaximumLength, sizeof(Buffer));
126 ok_eq_wchar(Buffer[0], 0xABAB);
127
128}
#define ok_eq_pointer(value, expected)
Definition: apitest.h:116
#define ok_eq_ulong(value, expected)
Definition: apitest.h:120
#define ok_eq_wstr(value, expected)
Definition: apitest.h:141
#define ok_eq_wchar(value, expected)
Definition: apitest.h:124
#define ok_ntstatus(status, expected)
Definition: atltest.h:135
#define ok(value,...)
Definition: atltest.h:57
#define broken(x)
Definition: atltest.h:178
LONG NTSTATUS
Definition: precomp.h:26
Definition: bufpool.h:45
#define NULL
Definition: types.h:112
#define L(x)
Definition: resources.c:13
Status
Definition: gdiplustypes.h:25
NTSYSAPI NTSTATUS NTAPI RtlQueryEnvironmentVariable_U(_In_opt_ PWSTR Environment, _In_ PCUNICODE_STRING Name, _Out_ PUNICODE_STRING Value)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define UNICODE_NULL
#define STATUS_VARIABLE_NOT_FOUND
Definition: ntstatus.h:586
short WCHAR
Definition: pedump.c:58
#define memset(x, y, z)
Definition: compat.h:39
#define STATUS_SUCCESS
Definition: shellext.h:65
#define STATUS_BUFFER_TOO_SMALL
Definition: shellext.h:69
USHORT MaximumLength
Definition: env_spec_w32.h:370