ReactOS
0.4.17-dev-1343-g8fe3cee
RtlValidateUnicodeString.c
Go to the documentation of this file.
1
/*
2
* PROJECT: ReactOS API Tests
3
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4
* PURPOSE: Test for RtlValidateUnicodeString
5
* COPYRIGHT: Copyright 2020 Hermes Belusca-Maito
6
*/
7
8
#include "
precomp.h
"
9
10
START_TEST
(
RtlValidateUnicodeString
)
11
{
12
NTSTATUS
Status
;
13
UNICODE_STRING
String
;
14
UNICODE_STRING
ValidString =
RTL_CONSTANT_STRING
(
L
"My Wild String!"
);
15
16
/* Start with a valid Unicode string */
17
String
= ValidString;
18
19
/* Non-zero flags are unsupported! */
20
Status
=
RtlValidateUnicodeString
(0, &
String
);
21
ok
(
Status
==
STATUS_SUCCESS
,
"Status = 0x%lx\n"
,
Status
);
22
Status
=
RtlValidateUnicodeString
(1, &
String
);
23
ok
(
Status
==
STATUS_INVALID_PARAMETER
,
"Status = 0x%lx\n"
,
Status
);
24
Status
=
RtlValidateUnicodeString
(0xdeadbeef, &
String
);
25
ok
(
Status
==
STATUS_INVALID_PARAMETER
,
"Status = 0x%lx\n"
,
Status
);
26
27
/* Empty string is allowed. Test also the flags. */
28
RtlInitEmptyUnicodeString
(&
String
,
NULL
, 0);
29
Status
=
RtlValidateUnicodeString
(0, &
String
);
30
ok
(
Status
==
STATUS_SUCCESS
,
"Status = 0x%lx\n"
,
Status
);
31
Status
=
RtlValidateUnicodeString
(1, &
String
);
32
ok
(
Status
==
STATUS_INVALID_PARAMETER
,
"Status = 0x%lx\n"
,
Status
);
33
Status
=
RtlValidateUnicodeString
(0xdeadbeef, &
String
);
34
ok
(
Status
==
STATUS_INVALID_PARAMETER
,
"Status = 0x%lx\n"
,
Status
);
35
36
// With a non-NULL but empty buffer, and zero lengths.
37
RtlInitEmptyUnicodeString
(&
String
,
L
""
, 0);
38
Status
=
RtlValidateUnicodeString
(0, &
String
);
39
ok
(
Status
==
STATUS_SUCCESS
,
"Status = 0x%lx\n"
,
Status
);
40
Status
=
RtlValidateUnicodeString
(1, &
String
);
41
ok
(
Status
==
STATUS_INVALID_PARAMETER
,
"Status = 0x%lx\n"
,
Status
);
42
Status
=
RtlValidateUnicodeString
(0xdeadbeef, &
String
);
43
ok
(
Status
==
STATUS_INVALID_PARAMETER
,
"Status = 0x%lx\n"
,
Status
);
44
45
// With a non-NULL but empty buffer, and zero Length, non-zero MaximumLength.
46
RtlInitEmptyUnicodeString
(&
String
,
L
""
,
sizeof
(
WCHAR
));
47
String
.Length = 0;
48
Status
=
RtlValidateUnicodeString
(0, &
String
);
49
ok
(
Status
==
STATUS_SUCCESS
,
"Status = 0x%lx\n"
,
Status
);
50
Status
=
RtlValidateUnicodeString
(1, &
String
);
51
ok
(
Status
==
STATUS_INVALID_PARAMETER
,
"Status = 0x%lx\n"
,
Status
);
52
Status
=
RtlValidateUnicodeString
(0xdeadbeef, &
String
);
53
ok
(
Status
==
STATUS_INVALID_PARAMETER
,
"Status = 0x%lx\n"
,
Status
);
54
55
/* NULL pointer is also allowed! Test also the flags. */
56
Status
=
RtlValidateUnicodeString
(0,
NULL
);
57
ok
(
Status
==
STATUS_SUCCESS
,
"Status = 0x%lx\n"
,
Status
);
58
Status
=
RtlValidateUnicodeString
(1,
NULL
);
59
ok
(
Status
==
STATUS_INVALID_PARAMETER
,
"Status = 0x%lx\n"
,
Status
);
60
Status
=
RtlValidateUnicodeString
(0xdeadbeef,
NULL
);
61
ok
(
Status
==
STATUS_INVALID_PARAMETER
,
"Status = 0x%lx\n"
,
Status
);
62
63
64
/*
65
* Now test invalid strings.
66
*/
67
68
// NULL buffer but non-zero lengths.
69
String
= ValidString;
70
String
.
Buffer
=
NULL
;
71
Status
=
RtlValidateUnicodeString
(0, &
String
);
72
ok
(
Status
==
STATUS_INVALID_PARAMETER
,
"Status = 0x%lx\n"
,
Status
);
73
74
// NULL buffer, zero Length, non-zero MaximumLength.
75
String
= ValidString;
76
String
.
Buffer
=
NULL
;
77
String
.Length = 0;
78
Status
=
RtlValidateUnicodeString
(0, &
String
);
79
ok
(
Status
==
STATUS_INVALID_PARAMETER
,
"Status = 0x%lx\n"
,
Status
);
80
81
// NULL buffer, non-zero Length, zero MaximumLength
82
// (tests also the case Length > MaximumLength that must fail).
83
String
= ValidString;
84
String
.
Buffer
=
NULL
;
85
String
.MaximumLength = 0;
86
Status
=
RtlValidateUnicodeString
(0, &
String
);
87
ok
(
Status
==
STATUS_INVALID_PARAMETER
,
"Status = 0x%lx\n"
,
Status
);
88
89
// Non-NULL buffer, non-zero Length, zero MaximumLength.
90
String
= ValidString;
91
String
.
MaximumLength
= 0;
92
Status
=
RtlValidateUnicodeString
(0, &
String
);
93
ok
(
Status
==
STATUS_INVALID_PARAMETER
,
"Status = 0x%lx\n"
,
Status
);
94
95
/* Non-NULL buffer, odd lengths */
96
97
String
= ValidString;
98
String
.
Length
--;
// Length was already >= 2 so it remains > 0.
99
Status
=
RtlValidateUnicodeString
(0, &
String
);
100
ok
(
Status
==
STATUS_INVALID_PARAMETER
,
"Status = 0x%lx\n"
,
Status
);
101
102
String
.MaximumLength--;
// MaximumLength was already >= 2 so it remains > 0.
103
Status
=
RtlValidateUnicodeString
(0, &
String
);
104
ok
(
Status
==
STATUS_INVALID_PARAMETER
,
"Status = 0x%lx\n"
,
Status
);
105
}
ok
#define ok(value,...)
Definition:
atltest.h:57
START_TEST
#define START_TEST(x)
Definition:
atltest.h:75
NTSTATUS
LONG NTSTATUS
Definition:
precomp.h:26
RtlInitEmptyUnicodeString
RtlInitEmptyUnicodeString(SymbolicLinkName, NULL, 0)
NULL
#define NULL
Definition:
types.h:112
RTL_CONSTANT_STRING
#define RTL_CONSTANT_STRING(s)
Definition:
combase.c:35
L
#define L(x)
Definition:
resources.c:13
Status
Status
Definition:
gdiplustypes.h:24
RtlValidateUnicodeString
NTSYSAPI NTSTATUS NTAPI RtlValidateUnicodeString(_In_ ULONG Flags, _In_ PCUNICODE_STRING String)
Definition:
unicode.c:2558
WCHAR
short WCHAR
Definition:
pedump.c:58
STATUS_SUCCESS
#define STATUS_SUCCESS
Definition:
shellext.h:65
_UNICODE_STRING
Definition:
env_spec_w32.h:368
_UNICODE_STRING::Length
USHORT Length
Definition:
env_spec_w32.h:369
_UNICODE_STRING::MaximumLength
USHORT MaximumLength
Definition:
env_spec_w32.h:370
_UNICODE_STRING::Buffer
PWSTR Buffer
Definition:
env_spec_w32.h:371
STATUS_INVALID_PARAMETER
#define STATUS_INVALID_PARAMETER
Definition:
udferr_usr.h:135
String
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition:
wdfdevice.h:2439
precomp.h
modules
rostests
apitests
ntdll
RtlValidateUnicodeString.c
Generated on Wed Nov 11 2026 06:12:17 for ReactOS by
1.9.6