2 * PROJECT: registry manipulation library
3 * LICENSE: GPL - See COPYING in the top level directory
4 * COPYRIGHT: Copyright 2005 Filip Navara <navaraf@reactos.org>
5 * Copyright 2001 - 2005 Eric Kohl
15 IN PCUNICODE_STRING KeyName
,
17 IN BOOLEAN CaseInsensitive
)
21 Buffer
[0] = (KeyName
->Length
>= 2) ? (CHAR
)KeyName
->Buffer
[0] : 0;
22 Buffer
[1] = (KeyName
->Length
>= 4) ? (CHAR
)KeyName
->Buffer
[1] : 0;
23 Buffer
[2] = (KeyName
->Length
>= 6) ? (CHAR
)KeyName
->Buffer
[2] : 0;
24 Buffer
[3] = (KeyName
->Length
>= 8) ? (CHAR
)KeyName
->Buffer
[3] : 0;
28 return (strncasecmp(Buffer
, HashString
, 4) == 0);
32 return (strncmp(Buffer
, HashString
, 4) == 0);
39 IN PCUNICODE_STRING CompareName
,
42 IN BOOLEAN NamePacked
,
43 IN BOOLEAN CaseInsensitive
)
47 if (NamePacked
== TRUE
)
49 PUCHAR PackedName
= (PUCHAR
)Name
;
51 if (CompareName
->Length
!= NameLength
* sizeof(WCHAR
))
53 //DPRINT1("Length doesn'T match %lu / %lu\n", CompareName->Length, NameLength);
59 for (i
= 0; i
< CompareName
->Length
/ sizeof(WCHAR
); i
++)
62 // RtlUpcaseUnicodeChar(CompareName->Buffer[i]),
63 // RtlUpcaseUnicodeChar(PackedName[i]));
64 if (RtlUpcaseUnicodeChar(CompareName
->Buffer
[i
]) !=
65 RtlUpcaseUnicodeChar(PackedName
[i
]))
67 //DbgPrint("\nFailed!\n");
71 //DbgPrint("\nSuccess!\n");
75 for (i
= 0; i
< CompareName
->Length
/ sizeof(WCHAR
); i
++)
77 if (CompareName
->Buffer
[i
] != PackedName
[i
])
85 PWCHAR UnicodeName
= (PWCHAR
)Name
;
87 if (CompareName
->Length
!= NameLength
)
92 for (i
= 0; i
< CompareName
->Length
/ sizeof(WCHAR
); i
++)
94 if (RtlUpcaseUnicodeChar(CompareName
->Buffer
[i
]) !=
95 RtlUpcaseUnicodeChar(UnicodeName
[i
]))
101 for (i
= 0; i
< CompareName
->Length
/ sizeof(WCHAR
); i
++)
103 if (CompareName
->Buffer
[i
] != UnicodeName
[i
])
116 IN PCM_KEY_NODE KeyNode
,
117 IN PCUNICODE_STRING KeyName
,
118 IN BOOLEAN CaseInsensitive
)
120 ASSERT(KeyNode
->Signature
== CM_KEY_NODE_SIGNATURE
);
121 return CmComparePackedNames(KeyName
,
124 (KeyNode
->Flags
& KEY_COMP_NAME
) ? TRUE
: FALSE
,
130 CmCompareKeyValueName(
131 IN PCM_KEY_VALUE ValueCell
,
132 IN PCUNICODE_STRING ValueName
,
133 IN BOOLEAN CaseInsensitive
)
135 ASSERT(ValueCell
->Signature
== CM_KEY_VALUE_SIGNATURE
);
136 return CmComparePackedNames(ValueName
,
138 ValueCell
->NameLength
,
139 (ValueCell
->Flags
& VALUE_COMP_NAME
) ? TRUE
: FALSE
,
147 _In_ ULONG BufferLength
,
149 _In_ USHORT NameLength
,
150 _In_ BOOLEAN NamePacked
)
154 ASSERT(NameLength
!= 0);
156 if (NamePacked
== TRUE
)
158 NameLength
*= sizeof(WCHAR
);
159 CharCount
= min(BufferLength
, NameLength
) / sizeof(WCHAR
);
163 PUCHAR PackedName
= (PUCHAR
)Name
;
165 for (i
= 0; i
< CharCount
; i
++)
167 Buffer
[i
] = PackedName
[i
];
173 CharCount
= min(BufferLength
, NameLength
) / sizeof(WCHAR
);
177 PWCHAR UnicodeName
= (PWCHAR
)Name
;
179 for (i
= 0; i
< CharCount
; i
++)
181 Buffer
[i
] = UnicodeName
[i
];
186 if (BufferLength
>= NameLength
+ sizeof(UNICODE_NULL
))
188 Buffer
[NameLength
/ sizeof(WCHAR
)] = '\0';
191 return NameLength
+ sizeof(WCHAR
);
197 IN PCM_KEY_NODE KeyNode
,
198 _Out_ PWCHAR KeyNameBuffer
,
199 _Inout_ ULONG BufferLength
)
201 ASSERT(KeyNode
->Signature
== CM_KEY_NODE_SIGNATURE
);
202 return CmCopyPackedName(KeyNameBuffer
,
206 (KeyNode
->Flags
& KEY_COMP_NAME
) ? TRUE
: FALSE
);
212 _In_ PCM_KEY_VALUE ValueCell
,
213 _Out_ PWCHAR ValueNameBuffer
,
214 _Inout_ ULONG BufferLength
)
216 ASSERT(ValueCell
->Signature
== CM_KEY_VALUE_SIGNATURE
);
217 return CmCopyPackedName(ValueNameBuffer
,
220 ValueCell
->NameLength
,
221 (ValueCell
->Flags
& VALUE_COMP_NAME
) ? TRUE
: FALSE
);