mirror of
https://github.com/reactos/reactos.git
synced 2025-04-21 12:40:33 +00:00
[RTL]
- Fix a number of MSVC/amd64 warnings/problems - Remove code duplication in RtlCharToInteger and RtlUnicodeStringToInteger - Fixup too large string length in RtlInitAnsiString, RtlInitUnicodeString - Use symbolic constants instead of hardcoded values - Fix overflow check in RtlInitUnicodeStringEx svn path=/trunk/; revision=53746
This commit is contained in:
parent
06631cf0ea
commit
080da6ec72
7 changed files with 138 additions and 141 deletions
|
@ -1118,7 +1118,7 @@ RtlAddMandatoryAce(
|
|||
IN ULONG Revision,
|
||||
IN ULONG Flags,
|
||||
IN ULONG MandatoryFlags,
|
||||
IN ULONG AceType,
|
||||
IN UCHAR AceType,
|
||||
IN PSID LabelSid);
|
||||
|
||||
NTSYSAPI
|
||||
|
@ -1993,7 +1993,7 @@ VOID
|
|||
NTAPI
|
||||
RtlFillMemoryUlong(
|
||||
IN PVOID Destination,
|
||||
IN ULONG Length,
|
||||
IN SIZE_T Length,
|
||||
IN ULONG Fill
|
||||
);
|
||||
|
||||
|
|
|
@ -110,7 +110,7 @@ RtlpAddKnownAce(
|
|||
GUID *ObjectTypeGuid OPTIONAL,
|
||||
GUID *InheritedObjectTypeGuid OPTIONAL,
|
||||
PSID Sid,
|
||||
ULONG Type)
|
||||
UCHAR Type)
|
||||
{
|
||||
PACE Ace;
|
||||
PSID SidStart;
|
||||
|
@ -223,7 +223,7 @@ RtlpAddKnownAce(
|
|||
}
|
||||
|
||||
/* initialize the header and common fields */
|
||||
Ace->Header.AceFlags = Flags;
|
||||
Ace->Header.AceFlags = (BYTE)Flags;
|
||||
Ace->Header.AceType = Type;
|
||||
Ace->Header.AceSize = (WORD)AceSize;
|
||||
Ace->AccessMask = AccessMask;
|
||||
|
@ -253,7 +253,7 @@ RtlpAddKnownAce(
|
|||
/* copy the SID */
|
||||
RtlCopySid(RtlLengthSid(Sid), SidStart, Sid);
|
||||
Acl->AceCount++;
|
||||
Acl->AclRevision = Revision;
|
||||
Acl->AclRevision = (BYTE)Revision;
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
@ -322,7 +322,7 @@ RtlAddAccessAllowedObjectAce(
|
|||
IN GUID *InheritedObjectTypeGuid OPTIONAL,
|
||||
IN PSID Sid)
|
||||
{
|
||||
ULONG Type;
|
||||
UCHAR Type;
|
||||
PAGED_CODE_RTL();
|
||||
|
||||
/* make sure we call RtlpAddKnownAce correctly */
|
||||
|
@ -405,7 +405,7 @@ RtlAddAccessDeniedObjectAce(
|
|||
IN GUID *InheritedObjectTypeGuid OPTIONAL,
|
||||
IN PSID Sid)
|
||||
{
|
||||
ULONG Type;
|
||||
UCHAR Type;
|
||||
PAGED_CODE_RTL();
|
||||
|
||||
/* make sure we call RtlpAddKnownAce correctly */
|
||||
|
@ -465,6 +465,7 @@ RtlAddAce(
|
|||
ULONG Index;
|
||||
PAGED_CODE_RTL();
|
||||
|
||||
/* Make sure, the ACL is valid */
|
||||
if (Acl->AclRevision < MIN_ACL_REVISION ||
|
||||
Acl->AclRevision > MAX_ACL_REVISION ||
|
||||
!RtlFirstFreeAce(Acl, &Ace))
|
||||
|
@ -472,8 +473,10 @@ RtlAddAce(
|
|||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
/* Check if the ACL revision is smaller than the given one */
|
||||
if (Acl->AclRevision <= AclRevision)
|
||||
{
|
||||
/* Update the revision to the given one */
|
||||
AclRevision = Acl->AclRevision;
|
||||
}
|
||||
|
||||
|
@ -510,6 +513,7 @@ RtlAddAce(
|
|||
AceListLength,
|
||||
Current,
|
||||
(ULONG)((ULONG_PTR)Ace - (ULONG_PTR)Current));
|
||||
|
||||
Acl->AceCount = Acl->AceCount + NewAceCount;
|
||||
Acl->AclRevision = AclRevision;
|
||||
|
||||
|
@ -591,7 +595,7 @@ RtlAddAuditAccessObjectAce(
|
|||
BOOLEAN Success,
|
||||
BOOLEAN Failure)
|
||||
{
|
||||
ULONG Type;
|
||||
UCHAR Type;
|
||||
|
||||
if (Success)
|
||||
{
|
||||
|
@ -630,7 +634,7 @@ RtlAddMandatoryAce(
|
|||
IN ULONG Revision,
|
||||
IN ULONG Flags,
|
||||
IN ULONG MandatoryFlags,
|
||||
IN ULONG AceType,
|
||||
IN UCHAR AceType,
|
||||
IN PSID LabelSid)
|
||||
{
|
||||
if (MandatoryFlags & ~SYSTEM_MANDATORY_LABEL_VALID_MASK)
|
||||
|
|
|
@ -241,7 +241,7 @@ static UNICODE_STRING xmlstr2unicode(const xmlstr_t *xmlstr)
|
|||
UNICODE_STRING res;
|
||||
|
||||
res.Buffer = (PWSTR)xmlstr->ptr;
|
||||
res.Length = res.MaximumLength = xmlstr->len * sizeof(WCHAR);
|
||||
res.Length = res.MaximumLength = (USHORT)xmlstr->len * sizeof(WCHAR);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
@ -647,7 +647,7 @@ static BOOL next_xml_attr(xmlbuf_t* xmlbuf, xmlstr_t* name, xmlstr_t* value,
|
|||
if (ptr == xmlbuf->end || *ptr != '=') return FALSE;
|
||||
|
||||
name->ptr = xmlbuf->ptr;
|
||||
name->len = ptr-xmlbuf->ptr;
|
||||
name->len = (ULONG)(ptr - xmlbuf->ptr);
|
||||
xmlbuf->ptr = ptr;
|
||||
|
||||
ptr++;
|
||||
|
@ -663,7 +663,7 @@ static BOOL next_xml_attr(xmlbuf_t* xmlbuf, xmlstr_t* name, xmlstr_t* value,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
value->len = ptr - value->ptr;
|
||||
value->len = (ULONG)(ptr - value->ptr);
|
||||
xmlbuf->ptr = ptr + 1;
|
||||
|
||||
if (xmlbuf->ptr == xmlbuf->end) return FALSE;
|
||||
|
@ -705,7 +705,7 @@ static BOOL next_xml_elem(xmlbuf_t* xmlbuf, xmlstr_t* elem)
|
|||
ptr++;
|
||||
|
||||
elem->ptr = xmlbuf->ptr;
|
||||
elem->len = ptr - xmlbuf->ptr;
|
||||
elem->len = (ULONG)(ptr - xmlbuf->ptr);
|
||||
xmlbuf->ptr = ptr;
|
||||
return xmlbuf->ptr != xmlbuf->end;
|
||||
}
|
||||
|
@ -733,7 +733,7 @@ static BOOL parse_text_content(xmlbuf_t* xmlbuf, xmlstr_t* content)
|
|||
if (!ptr) return FALSE;
|
||||
|
||||
content->ptr = xmlbuf->ptr;
|
||||
content->len = ptr - xmlbuf->ptr;
|
||||
content->len = (ULONG)(ptr - xmlbuf->ptr);
|
||||
xmlbuf->ptr = ptr;
|
||||
|
||||
return TRUE;
|
||||
|
@ -1555,7 +1555,7 @@ static NTSTATUS parse_manifest( struct actctx_loader* acl, struct assembly_ident
|
|||
: ACTIVATION_CONTEXT_PATH_TYPE_NONE;
|
||||
|
||||
unicode_tests = IS_TEXT_UNICODE_SIGNATURE | IS_TEXT_UNICODE_REVERSE_SIGNATURE;
|
||||
if (RtlIsTextUnicode( (PVOID) buffer, size, &unicode_tests ))
|
||||
if (RtlIsTextUnicode((PVOID)buffer, (ULONG)size, &unicode_tests ))
|
||||
{
|
||||
xmlbuf.ptr = buffer;
|
||||
xmlbuf.end = xmlbuf.ptr + size / sizeof(WCHAR);
|
||||
|
@ -1579,12 +1579,12 @@ static NTSTATUS parse_manifest( struct actctx_loader* acl, struct assembly_ident
|
|||
else
|
||||
{
|
||||
/* let's assume utf-8 for now */
|
||||
int len;
|
||||
size_t len;
|
||||
WCHAR *new_buff;
|
||||
|
||||
_SEH2_TRY
|
||||
{
|
||||
len = mbstowcs( NULL, buffer, size);
|
||||
len = mbstowcs(NULL, buffer, size);
|
||||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
|
@ -1628,7 +1628,7 @@ static NTSTATUS open_nt_file( HANDLE *handle, UNICODE_STRING *name )
|
|||
return NtOpenFile( handle, GENERIC_READ, &attr, &io, FILE_SHARE_READ, FILE_SYNCHRONOUS_IO_ALERT );
|
||||
}
|
||||
|
||||
static NTSTATUS get_module_filename( HMODULE module, UNICODE_STRING *str, unsigned int extra_len )
|
||||
static NTSTATUS get_module_filename( HMODULE module, UNICODE_STRING *str, USHORT extra_len )
|
||||
{
|
||||
NTSTATUS status;
|
||||
ULONG magic;
|
||||
|
@ -1881,7 +1881,7 @@ static WCHAR *lookup_manifest_file( HANDLE dir, struct assembly_identity *ai )
|
|||
WCHAR *tmp;
|
||||
ULONG build, revision;
|
||||
|
||||
data_len = io.Information;
|
||||
data_len = (ULONG)io.Information;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
|
@ -1890,7 +1890,7 @@ static WCHAR *lookup_manifest_file( HANDLE dir, struct assembly_identity *ai )
|
|||
NtQueryDirectoryFile( dir, 0, NULL, NULL, &io, buffer, sizeof(buffer),
|
||||
FileBothDirectoryInformation, FALSE, &lookup_us, FALSE );
|
||||
if (io.Status != STATUS_SUCCESS) break;
|
||||
data_len = io.Information;
|
||||
data_len = (ULONG)io.Information;
|
||||
data_pos = 0;
|
||||
}
|
||||
dir_info = (FILE_BOTH_DIR_INFORMATION*)(buffer + data_pos);
|
||||
|
@ -1905,8 +1905,8 @@ static WCHAR *lookup_manifest_file( HANDLE dir, struct assembly_identity *ai )
|
|||
revision = atoiW(tmp);
|
||||
if (build == ai->version.build && revision < ai->version.revision)
|
||||
continue;
|
||||
ai->version.build = build;
|
||||
ai->version.revision = revision;
|
||||
ai->version.build = (USHORT)build;
|
||||
ai->version.revision = (USHORT)revision;
|
||||
|
||||
if ((ret = RtlAllocateHeap( RtlGetProcessHeap(), 0, dir_info->FileNameLength * sizeof(WCHAR) )))
|
||||
{
|
||||
|
@ -2525,11 +2525,11 @@ RtlQueryInformationActivationContext( ULONG flags, HANDLE handle, PVOID subinst,
|
|||
acdi->ulFormatVersion = assembly ? 1 : 0; /* FIXME */
|
||||
acdi->ulAssemblyCount = actctx->num_assemblies;
|
||||
acdi->ulRootManifestPathType = assembly ? assembly->manifest.type : 0 /* FIXME */;
|
||||
acdi->ulRootManifestPathChars = assembly && assembly->manifest.info ? manifest_len - 1 : 0;
|
||||
acdi->ulRootManifestPathChars = assembly && assembly->manifest.info ? (DWORD)manifest_len - 1 : 0;
|
||||
acdi->ulRootConfigurationPathType = actctx->config.type;
|
||||
acdi->ulRootConfigurationPathChars = actctx->config.info ? config_len - 1 : 0;
|
||||
acdi->ulRootConfigurationPathChars = actctx->config.info ? (DWORD)config_len - 1 : 0;
|
||||
acdi->ulAppDirPathType = actctx->appdir.type;
|
||||
acdi->ulAppDirPathChars = actctx->appdir.info ? appdir_len - 1 : 0;
|
||||
acdi->ulAppDirPathChars = actctx->appdir.info ? (DWORD)appdir_len - 1 : 0;
|
||||
ptr = (LPWSTR)(acdi + 1);
|
||||
if (manifest_len)
|
||||
{
|
||||
|
@ -2589,9 +2589,9 @@ RtlQueryInformationActivationContext( ULONG flags, HANDLE handle, PVOID subinst,
|
|||
}
|
||||
|
||||
afdi->ulFlags = 0; /* FIXME */
|
||||
afdi->ulEncodedAssemblyIdentityLength = (id_len - 1) * sizeof(WCHAR);
|
||||
afdi->ulEncodedAssemblyIdentityLength = (DWORD)(id_len - 1) * sizeof(WCHAR);
|
||||
afdi->ulManifestPathType = assembly->manifest.type;
|
||||
afdi->ulManifestPathLength = assembly->manifest.info ? (path_len - 1) * sizeof(WCHAR) : 0;
|
||||
afdi->ulManifestPathLength = assembly->manifest.info ? (DWORD)(path_len - 1) * sizeof(WCHAR) : 0;
|
||||
/* FIXME afdi->liManifestLastWriteTime = 0; */
|
||||
afdi->ulPolicyPathType = ACTIVATION_CONTEXT_PATH_TYPE_NONE; /* FIXME */
|
||||
afdi->ulPolicyPathLength = 0;
|
||||
|
@ -2601,7 +2601,7 @@ RtlQueryInformationActivationContext( ULONG flags, HANDLE handle, PVOID subinst,
|
|||
afdi->ulManifestVersionMinor = 0;
|
||||
afdi->ulPolicyVersionMajor = 0; /* FIXME */
|
||||
afdi->ulPolicyVersionMinor = 0; /* FIXME */
|
||||
afdi->ulAssemblyDirectoryNameLength = ad_len ? (ad_len - 1) * sizeof(WCHAR) : 0;
|
||||
afdi->ulAssemblyDirectoryNameLength = ad_len ? (DWORD)(ad_len - 1) * sizeof(WCHAR) : 0;
|
||||
ptr = (LPWSTR)(afdi + 1);
|
||||
afdi->lpAssemblyEncodedAssemblyIdentity = ptr;
|
||||
memcpy( ptr, assembly_id, id_len * sizeof(WCHAR) );
|
||||
|
@ -2654,7 +2654,7 @@ RtlQueryInformationActivationContext( ULONG flags, HANDLE handle, PVOID subinst,
|
|||
}
|
||||
if (retlen) *retlen = 0; /* yes that's what native does !! */
|
||||
afdi->ulFlags = ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION;
|
||||
afdi->ulFilenameLength = dll_len ? (dll_len - 1) * sizeof(WCHAR) : 0;
|
||||
afdi->ulFilenameLength = dll_len ? (DWORD)(dll_len - 1) * sizeof(WCHAR) : 0;
|
||||
afdi->ulPathLength = 0; /* FIXME */
|
||||
ptr = (LPWSTR)(afdi + 1);
|
||||
if (dll_len)
|
||||
|
|
|
@ -354,7 +354,7 @@ RtlVirtualUnwind(
|
|||
IN OUT PKNONVOLATILE_CONTEXT_POINTERS ContextPointers)
|
||||
{
|
||||
PUNWIND_INFO UnwindInfo;
|
||||
ULONG CodeOffset;
|
||||
ULONG_PTR CodeOffset;
|
||||
ULONG i;
|
||||
UNWIND_CODE UnwindCode;
|
||||
BYTE Reg;
|
||||
|
@ -524,7 +524,7 @@ RtlWalkFrameChain(OUT PVOID *Callers,
|
|||
ULONG64 ControlPc, ImageBase, EstablisherFrame;
|
||||
ULONG64 StackLow, StackHigh;
|
||||
PVOID HandlerData;
|
||||
INT i;
|
||||
ULONG i;
|
||||
PRUNTIME_FUNCTION FunctionEntry;
|
||||
|
||||
DPRINT("Enter RtlWalkFrameChain\n");
|
||||
|
|
|
@ -43,7 +43,7 @@ BOOLEAN
|
|||
NTAPI
|
||||
LdrVerifyMappedImageMatchesChecksum(
|
||||
IN PVOID BaseAddress,
|
||||
IN ULONG ImageSize,
|
||||
IN SIZE_T ImageSize,
|
||||
IN ULONG FileLength)
|
||||
{
|
||||
#if 0
|
||||
|
|
|
@ -26,7 +26,7 @@ static __inline VOID
|
|||
RtlpCopyParameterString(PWCHAR *Ptr,
|
||||
PUNICODE_STRING Destination,
|
||||
PUNICODE_STRING Source,
|
||||
ULONG Size)
|
||||
USHORT Size)
|
||||
{
|
||||
Destination->Length = Source->Length;
|
||||
Destination->MaximumLength = Size ? Size : Source->MaximumLength;
|
||||
|
|
|
@ -99,7 +99,7 @@ RtlAnsiStringToUnicodeString(
|
|||
if (AllocateDestinationString)
|
||||
{
|
||||
UniDest->Buffer = RtlpAllocateStringMemory(Length, TAG_USTR);
|
||||
UniDest->MaximumLength = Length;
|
||||
UniDest->MaximumLength = (USHORT)Length;
|
||||
if (!UniDest->Buffer) return STATUS_NO_MEMORY;
|
||||
}
|
||||
else if (UniDest->Length >= UniDest->MaximumLength)
|
||||
|
@ -320,17 +320,13 @@ RtlCharToInteger(
|
|||
digit = -1;
|
||||
}
|
||||
|
||||
if (digit < 0 || digit >= (int)base)
|
||||
{
|
||||
*value = bMinus ? -RunningTotal : RunningTotal;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
if (digit < 0 || digit >= (int)base) break;
|
||||
|
||||
RunningTotal = RunningTotal * base + digit;
|
||||
str++;
|
||||
}
|
||||
|
||||
*value = bMinus ? -RunningTotal : RunningTotal;
|
||||
*value = bMinus ? (0 - RunningTotal) : RunningTotal;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -518,13 +514,14 @@ NTAPI
|
|||
RtlInitAnsiString(IN OUT PANSI_STRING DestinationString,
|
||||
IN PCSZ SourceString)
|
||||
{
|
||||
ULONG DestSize;
|
||||
SIZE_T Size;
|
||||
|
||||
if(SourceString)
|
||||
if (SourceString)
|
||||
{
|
||||
DestSize = strlen(SourceString);
|
||||
DestinationString->Length = (USHORT)DestSize;
|
||||
DestinationString->MaximumLength = (USHORT)DestSize + sizeof(CHAR);
|
||||
Size = strlen(SourceString);
|
||||
if (Size > (MAXUSHORT - sizeof(CHAR))) Size = MAXUSHORT - sizeof(CHAR);
|
||||
DestinationString->Length = (USHORT)Size;
|
||||
DestinationString->MaximumLength = (USHORT)Size + sizeof(CHAR);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -540,14 +537,14 @@ NTAPI
|
|||
RtlInitAnsiStringEx(IN OUT PANSI_STRING DestinationString,
|
||||
IN PCSZ SourceString)
|
||||
{
|
||||
ULONG DestSize;
|
||||
SIZE_T Size;
|
||||
|
||||
if(SourceString)
|
||||
if (SourceString)
|
||||
{
|
||||
DestSize = strlen(SourceString);
|
||||
if (DestSize >= 0xFFFF) return STATUS_NAME_TOO_LONG;
|
||||
DestinationString->Length = (USHORT)DestSize;
|
||||
DestinationString->MaximumLength = (USHORT)DestSize + sizeof(CHAR);
|
||||
Size = strlen(SourceString);
|
||||
if (Size > (MAXUSHORT - sizeof(CHAR))) return STATUS_NAME_TOO_LONG;
|
||||
DestinationString->Length = (USHORT)Size;
|
||||
DestinationString->MaximumLength = (USHORT)Size + sizeof(CHAR);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -582,16 +579,18 @@ RtlInitString(
|
|||
*/
|
||||
VOID
|
||||
NTAPI
|
||||
RtlInitUnicodeString(IN OUT PUNICODE_STRING DestinationString,
|
||||
IN PCWSTR SourceString)
|
||||
RtlInitUnicodeString(
|
||||
IN OUT PUNICODE_STRING DestinationString,
|
||||
IN PCWSTR SourceString)
|
||||
{
|
||||
ULONG DestSize;
|
||||
SIZE_T Size;
|
||||
|
||||
if(SourceString)
|
||||
if (SourceString)
|
||||
{
|
||||
DestSize = wcslen(SourceString) * sizeof(WCHAR);
|
||||
DestinationString->Length = (USHORT)DestSize;
|
||||
DestinationString->MaximumLength = (USHORT)DestSize + sizeof(WCHAR);
|
||||
Size = wcslen(SourceString) * sizeof(WCHAR);
|
||||
if (Size > (MAXUSHORT - sizeof(WCHAR))) Size = MAXUSHORT - sizeof(WCHAR);
|
||||
DestinationString->Length = (USHORT)Size;
|
||||
DestinationString->MaximumLength = (USHORT)Size + sizeof(WCHAR);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -607,17 +606,18 @@ RtlInitUnicodeString(IN OUT PUNICODE_STRING DestinationString,
|
|||
*/
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
RtlInitUnicodeStringEx(OUT PUNICODE_STRING DestinationString,
|
||||
IN PCWSTR SourceString)
|
||||
RtlInitUnicodeStringEx(
|
||||
OUT PUNICODE_STRING DestinationString,
|
||||
IN PCWSTR SourceString)
|
||||
{
|
||||
ULONG DestSize;
|
||||
SIZE_T Size;
|
||||
|
||||
if(SourceString)
|
||||
if (SourceString)
|
||||
{
|
||||
DestSize = wcslen(SourceString) * sizeof(WCHAR);
|
||||
if (DestSize >= 0xFFFC) return STATUS_NAME_TOO_LONG;
|
||||
DestinationString->Length = (USHORT)DestSize;
|
||||
DestinationString->MaximumLength = (USHORT)DestSize + sizeof(WCHAR);
|
||||
Size = wcslen(SourceString) * sizeof(WCHAR);
|
||||
if (Size > (MAXUSHORT - sizeof(WCHAR))) return STATUS_NAME_TOO_LONG;
|
||||
DestinationString->Length = (USHORT)Size;
|
||||
DestinationString->MaximumLength = (USHORT)Size + sizeof(WCHAR);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -646,7 +646,7 @@ NTSTATUS NTAPI RtlIntegerToChar(
|
|||
CHAR buffer[33];
|
||||
PCHAR pos;
|
||||
CHAR digit;
|
||||
ULONG len;
|
||||
SIZE_T len;
|
||||
|
||||
if (base == 0)
|
||||
{
|
||||
|
@ -663,7 +663,7 @@ NTSTATUS NTAPI RtlIntegerToChar(
|
|||
do
|
||||
{
|
||||
pos--;
|
||||
digit = value % base;
|
||||
digit = (CHAR)(value % base);
|
||||
value = value / base;
|
||||
|
||||
if (digit < 10)
|
||||
|
@ -734,8 +734,8 @@ RtlIntegerToUnicode(
|
|||
i = v % Radix;
|
||||
v = v / Radix;
|
||||
|
||||
if (i < 10) *tp = i + L'0';
|
||||
else *tp = i + L'a' - 10;
|
||||
if (i < 10) *tp = (WCHAR)(i + L'0');
|
||||
else *tp = (WCHAR)(i + L'a' - 10);
|
||||
|
||||
tp++;
|
||||
}
|
||||
|
@ -1003,18 +1003,14 @@ RtlUnicodeStringToInteger(
|
|||
digit = -1;
|
||||
}
|
||||
|
||||
if (digit < 0 || digit >= base)
|
||||
{
|
||||
*value = bMinus ? -RunningTotal : RunningTotal;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
if (digit < 0 || (ULONG)digit >= base) break;
|
||||
|
||||
RunningTotal = RunningTotal * base + digit;
|
||||
lpwstr++;
|
||||
CharsRemaining--;
|
||||
}
|
||||
|
||||
*value = bMinus ? -RunningTotal : RunningTotal;
|
||||
*value = bMinus ? (0 - RunningTotal) : RunningTotal;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -1078,7 +1074,7 @@ RtlUnicodeStringToAnsiString(
|
|||
if (AllocateDestinationString)
|
||||
{
|
||||
AnsiDest->Buffer = RtlpAllocateStringMemory(Length, TAG_ASTR);
|
||||
AnsiDest->MaximumLength = Length;
|
||||
AnsiDest->MaximumLength = (USHORT)Length;
|
||||
|
||||
if (!AnsiDest->Buffer) return STATUS_NO_MEMORY;
|
||||
}
|
||||
|
@ -1135,7 +1131,7 @@ RtlOemStringToUnicodeString(
|
|||
if (AllocateDestinationString)
|
||||
{
|
||||
UniDest->Buffer = RtlpAllocateStringMemory(Length, TAG_USTR);
|
||||
UniDest->MaximumLength = Length;
|
||||
UniDest->MaximumLength = (USHORT)Length;
|
||||
|
||||
if (!UniDest->Buffer) return STATUS_NO_MEMORY;
|
||||
}
|
||||
|
@ -1189,7 +1185,7 @@ RtlUnicodeStringToOemString(
|
|||
if (AllocateDestinationString)
|
||||
{
|
||||
OemDest->Buffer = RtlpAllocateStringMemory(Length, TAG_OSTR);
|
||||
OemDest->MaximumLength = Length;
|
||||
OemDest->MaximumLength = (USHORT)Length;
|
||||
|
||||
if (!OemDest->Buffer) return STATUS_NO_MEMORY;
|
||||
}
|
||||
|
@ -1378,7 +1374,7 @@ RtlOemStringToCountedUnicodeString(
|
|||
if (AllocateDestinationString)
|
||||
{
|
||||
UniDest->Buffer = RtlpAllocateStringMemory(Length, TAG_USTR);
|
||||
UniDest->MaximumLength = Length;
|
||||
UniDest->MaximumLength = (USHORT)Length;
|
||||
|
||||
if (!UniDest->Buffer) return STATUS_NO_MEMORY;
|
||||
}
|
||||
|
@ -1455,8 +1451,7 @@ BOOLEAN
|
|||
NTAPI
|
||||
RtlEqualDomainName (
|
||||
IN PUNICODE_STRING DomainName1,
|
||||
IN PUNICODE_STRING DomainName2
|
||||
)
|
||||
IN PUNICODE_STRING DomainName2)
|
||||
{
|
||||
return RtlEqualComputerName(DomainName1, DomainName2);
|
||||
}
|
||||
|
@ -1483,8 +1478,7 @@ NTSTATUS
|
|||
NTAPI
|
||||
RtlGUIDFromString(
|
||||
IN UNICODE_STRING *str,
|
||||
OUT GUID* guid
|
||||
)
|
||||
OUT GUID* guid)
|
||||
{
|
||||
int i = 0;
|
||||
const WCHAR *lpszCLSID = str->Buffer;
|
||||
|
@ -1697,7 +1691,7 @@ RtlUnicodeStringToCountedOemString(
|
|||
if (AllocateDestinationString)
|
||||
{
|
||||
OemDest->Buffer = RtlpAllocateStringMemory(Length, TAG_OSTR);
|
||||
OemDest->MaximumLength = Length;
|
||||
OemDest->MaximumLength = (USHORT)Length;
|
||||
if (!OemDest->Buffer) return STATUS_NO_MEMORY;
|
||||
}
|
||||
else if (OemDest->Length > OemDest->MaximumLength)
|
||||
|
@ -1742,13 +1736,12 @@ RtlLargeIntegerToChar(
|
|||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
CHAR Buffer[65];
|
||||
CHAR Digit;
|
||||
ULONG Len;
|
||||
SIZE_T Len;
|
||||
PCHAR Pos;
|
||||
|
||||
if (Base == 0) Base = 10;
|
||||
|
||||
if ((Base != 2) && (Base != 8) &&
|
||||
(Base != 10) && (Base != 16))
|
||||
if ((Base != 2) && (Base != 8) && (Base != 10) && (Base != 16))
|
||||
{
|
||||
return STATUS_INVALID_PARAMETER;
|
||||
}
|
||||
|
@ -1759,7 +1752,7 @@ RtlLargeIntegerToChar(
|
|||
do
|
||||
{
|
||||
Pos--;
|
||||
Digit = Val % Base;
|
||||
Digit = (CHAR)(Val % Base);
|
||||
Val = Val / Base;
|
||||
|
||||
if (Digit < 10)
|
||||
|
@ -1873,7 +1866,7 @@ RtlUpcaseUnicodeStringToAnsiString(
|
|||
if (AllocateDestinationString)
|
||||
{
|
||||
AnsiDest->Buffer = RtlpAllocateStringMemory(Length, TAG_ASTR);
|
||||
AnsiDest->MaximumLength = Length;
|
||||
AnsiDest->MaximumLength = (USHORT)Length;
|
||||
if (!AnsiDest->Buffer) return STATUS_NO_MEMORY;
|
||||
}
|
||||
else if (AnsiDest->Length >= AnsiDest->MaximumLength)
|
||||
|
@ -1931,7 +1924,7 @@ RtlUpcaseUnicodeStringToCountedOemString(
|
|||
if (AllocateDestinationString)
|
||||
{
|
||||
OemDest->Buffer = RtlpAllocateStringMemory(Length, TAG_OSTR);
|
||||
OemDest->MaximumLength = Length;
|
||||
OemDest->MaximumLength = (USHORT)Length;
|
||||
if (!OemDest->Buffer) return STATUS_NO_MEMORY;
|
||||
}
|
||||
else if (OemDest->Length > OemDest->MaximumLength)
|
||||
|
@ -1985,7 +1978,7 @@ RtlUpcaseUnicodeStringToOemString (
|
|||
if (AllocateDestinationString)
|
||||
{
|
||||
OemDest->Buffer = RtlpAllocateStringMemory(Length, TAG_OSTR);
|
||||
OemDest->MaximumLength = Length;
|
||||
OemDest->MaximumLength = (USHORT)Length;
|
||||
if (!OemDest->Buffer) return STATUS_NO_MEMORY;
|
||||
}
|
||||
else if (OemDest->Length >= OemDest->MaximumLength)
|
||||
|
@ -2208,19 +2201,19 @@ RtlCreateUnicodeString(
|
|||
IN OUT PUNICODE_STRING UniDest,
|
||||
IN PCWSTR Source)
|
||||
{
|
||||
ULONG Length;
|
||||
SIZE_T Size;
|
||||
PAGED_CODE_RTL();
|
||||
|
||||
Length = (wcslen(Source) + 1) * sizeof(WCHAR);
|
||||
if (Length > 0xFFFE) return FALSE;
|
||||
Size = (wcslen(Source) + 1) * sizeof(WCHAR);
|
||||
if (Size > MAXUSHORT) return FALSE;
|
||||
|
||||
UniDest->Buffer = RtlpAllocateStringMemory(Length, TAG_USTR);
|
||||
UniDest->Buffer = RtlpAllocateStringMemory((ULONG)Size, TAG_USTR);
|
||||
|
||||
if (UniDest->Buffer == NULL) return FALSE;
|
||||
|
||||
RtlCopyMemory(UniDest->Buffer, Source, Length);
|
||||
UniDest->MaximumLength = (USHORT)Length;
|
||||
UniDest->Length = Length - sizeof (WCHAR);
|
||||
RtlCopyMemory(UniDest->Buffer, Source, Size);
|
||||
UniDest->MaximumLength = (USHORT)Size;
|
||||
UniDest->Length = (USHORT)Size - sizeof (WCHAR);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -2353,19 +2346,19 @@ RtlAppendAsciizToString(
|
|||
IN OUT PSTRING Destination,
|
||||
IN PCSZ Source)
|
||||
{
|
||||
ULONG Length;
|
||||
SIZE_T Size;
|
||||
|
||||
if (Source)
|
||||
{
|
||||
Length = (USHORT)strlen(Source);
|
||||
Size = strlen(Source);
|
||||
|
||||
if (Destination->Length + Length > Destination->MaximumLength)
|
||||
if (Destination->Length + Size > Destination->MaximumLength)
|
||||
{
|
||||
return STATUS_BUFFER_TOO_SMALL;
|
||||
}
|
||||
|
||||
RtlMoveMemory(&Destination->Buffer[Destination->Length], Source, Length);
|
||||
Destination->Length += Length;
|
||||
RtlMoveMemory(&Destination->Buffer[Destination->Length], Source, Size);
|
||||
Destination->Length += (USHORT)Size;
|
||||
}
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
|
@ -2379,7 +2372,7 @@ NTAPI
|
|||
RtlUpperString(PSTRING DestinationString,
|
||||
PSTRING SourceString)
|
||||
{
|
||||
ULONG Length;
|
||||
USHORT Length;
|
||||
PCHAR Src, Dest;
|
||||
|
||||
Length = min(SourceString->Length,
|
||||
|
@ -2502,20 +2495,20 @@ RtlFindCharInUnicodeString(
|
|||
IN PCUNICODE_STRING MatchString,
|
||||
OUT PUSHORT Position)
|
||||
{
|
||||
int main_idx;
|
||||
unsigned int search_idx;
|
||||
SHORT i;
|
||||
USHORT j;
|
||||
|
||||
switch (Flags)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
for (main_idx = 0; main_idx < SearchString->Length / sizeof(WCHAR); main_idx++)
|
||||
for (i = 0; i < SearchString->Length / sizeof(WCHAR); i++)
|
||||
{
|
||||
for (search_idx = 0; search_idx < MatchString->Length / sizeof(WCHAR); search_idx++)
|
||||
for (j = 0; j < MatchString->Length / sizeof(WCHAR); j++)
|
||||
{
|
||||
if (SearchString->Buffer[main_idx] == MatchString->Buffer[search_idx])
|
||||
if (SearchString->Buffer[i] == MatchString->Buffer[j])
|
||||
{
|
||||
*Position = (main_idx + 1) * sizeof(WCHAR);
|
||||
*Position = (i + 1) * sizeof(WCHAR);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
@ -2527,13 +2520,13 @@ RtlFindCharInUnicodeString(
|
|||
|
||||
case 1:
|
||||
{
|
||||
for (main_idx = SearchString->Length / sizeof(WCHAR) - 1; main_idx >= 0; main_idx--)
|
||||
for (i = SearchString->Length / sizeof(WCHAR) - 1; i >= 0; i--)
|
||||
{
|
||||
for (search_idx = 0; search_idx < MatchString->Length / sizeof(WCHAR); search_idx++)
|
||||
for (j = 0; j < MatchString->Length / sizeof(WCHAR); j++)
|
||||
{
|
||||
if (SearchString->Buffer[main_idx] == MatchString->Buffer[search_idx])
|
||||
if (SearchString->Buffer[i] == MatchString->Buffer[j])
|
||||
{
|
||||
*Position = main_idx * sizeof(WCHAR);
|
||||
*Position = i * sizeof(WCHAR);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
@ -2545,19 +2538,19 @@ RtlFindCharInUnicodeString(
|
|||
|
||||
case 2:
|
||||
{
|
||||
for (main_idx = 0; main_idx < SearchString->Length / sizeof(WCHAR); main_idx++)
|
||||
for (i = 0; i < SearchString->Length / sizeof(WCHAR); i++)
|
||||
{
|
||||
search_idx = 0;
|
||||
j = 0;
|
||||
|
||||
while (search_idx < MatchString->Length / sizeof(WCHAR) &&
|
||||
SearchString->Buffer[main_idx] != MatchString->Buffer[search_idx])
|
||||
while (j < MatchString->Length / sizeof(WCHAR) &&
|
||||
SearchString->Buffer[i] != MatchString->Buffer[j])
|
||||
{
|
||||
search_idx++;
|
||||
j++;
|
||||
}
|
||||
|
||||
if (search_idx >= MatchString->Length / sizeof(WCHAR))
|
||||
if (j >= MatchString->Length / sizeof(WCHAR))
|
||||
{
|
||||
*Position = (main_idx + 1) * sizeof(WCHAR);
|
||||
*Position = (i + 1) * sizeof(WCHAR);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
@ -2568,19 +2561,19 @@ RtlFindCharInUnicodeString(
|
|||
|
||||
case 3:
|
||||
{
|
||||
for (main_idx = SearchString->Length / sizeof(WCHAR) - 1; main_idx >= 0; main_idx--)
|
||||
for (i = SearchString->Length / sizeof(WCHAR) - 1; i >= 0; i--)
|
||||
{
|
||||
search_idx = 0;
|
||||
j = 0;
|
||||
|
||||
while (search_idx < MatchString->Length / sizeof(WCHAR) &&
|
||||
SearchString->Buffer[main_idx] != MatchString->Buffer[search_idx])
|
||||
while (j < MatchString->Length / sizeof(WCHAR) &&
|
||||
SearchString->Buffer[i] != MatchString->Buffer[j])
|
||||
{
|
||||
search_idx++;
|
||||
j++;
|
||||
}
|
||||
|
||||
if (search_idx >= MatchString->Length / sizeof(WCHAR))
|
||||
if (j >= MatchString->Length / sizeof(WCHAR))
|
||||
{
|
||||
*Position = main_idx * sizeof(WCHAR);
|
||||
*Position = i * sizeof(WCHAR);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue