1 ////////////////////////////////////////////////////////////////////
2 // Copyright (C) Alexander Telyatnikov, Ivan Keliukh, Yegor Anchishkin, SKIF Software, 1999-2013. Kiev, Ukraine
4 // This file was released under the GPLv2 on June 2015.
5 ////////////////////////////////////////////////////////////////////
17 for(i
=0; i
<len
; i
++) {
18 if( ((char*)s1
)[i
] != ((char*)s2
)[i
] )
24 #define STRING_BUFFER_ALIGNMENT (32)
25 #define STRING_BUFFER_ALIGN(sz) (((sz)+STRING_BUFFER_ALIGNMENT)&(~((ULONG)(STRING_BUFFER_ALIGNMENT-1))))
27 #ifndef NT_NATIVE_MODE
31 RtlCompareUnicodeString(
39 if(s1
->Length
!= s2
->Length
) return (-1);
40 i
= memcmp(s1
->Buffer
, s2
->Buffer
, (s1
->Length
) ? (s1
->Length
) : (s2
->Length
));
46 RtlUpcaseUnicodeString(
52 // if(s1->Length != s2->Length) return (-1);
53 memcpy(dst
->Buffer
, src
->Buffer
, src
->Length
);
54 dst
->Buffer
[src
->Length
/sizeof(WCHAR
)] = 0;
55 dst
->Length
= src
->Length
;
57 return STATUS_SUCCESS
;
62 RtlAppendUnicodeToString(
63 IN PUNICODE_STRING Str1
,
77 __asm cmp
[word ptr esi
+ebx
],0
86 #else // NO X86 optimization, use generic C/C++
97 ASSERT(Str1
->MaximumLength
);
98 if((Str1
->Length
+i
+sizeof(WCHAR
)) > Str1
->MaximumLength
) {
99 PWCHAR tmp2
= (PWCHAR
)ExAllocatePoolWithTag(NonPagedPool
, STRING_BUFFER_ALIGN(i
+ Str1
->Length
+ sizeof(WCHAR
))*2, 'ilTS');
101 return STATUS_INSUFFICIENT_RESOURCES
;
102 memcpy(tmp2
, tmp
, Str1
->MaximumLength
);
105 Str1
->MaximumLength
= STRING_BUFFER_ALIGN(i
+ sizeof(WCHAR
))*2;
108 RtlCopyMemory(((PCHAR
)tmp
)+Str1
->Length
, Str2
, i
);
110 tmp
[(i
/ sizeof(WCHAR
))] = 0;
113 return STATUS_SUCCESS
;
115 #undef UDF_UNC_STR_TAG
117 } // end RtlAppendUnicodeToString()
119 #endif //NT_NATIVE_MODE
124 IN PUNICODE_STRING Str1
,
138 __asm cmp
[word ptr esi
+ebx
],0
147 #else // NO X86 optimization, use generic C/C++
157 Str1
->MaximumLength
= STRING_BUFFER_ALIGN((Str1
->Length
= i
) + sizeof(WCHAR
));
158 Str1
->Buffer
= (PWCHAR
)MyAllocatePool__(NonPagedPool
, Str1
->MaximumLength
);
160 return STATUS_INSUFFICIENT_RESOURCES
;
161 RtlCopyMemory(Str1
->Buffer
, Str2
, i
);
162 Str1
->Buffer
[i
/sizeof(WCHAR
)] = 0;
163 return STATUS_SUCCESS
;
165 } // end MyInitUnicodeString()