Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1997-1999 Microsoft Corporation
Module Name:
dpapi.c
Abstract: WMI data provider api set
Author:
16-Jan-1997 AlanWar
Revision History:
--*/
#include "wmiump.h"
ULONG WmipCountedAnsiToCountedUnicode( PCHAR Ansi, PWCHAR Unicode ) /*++
Routine Description:
Translate a counted ansi string into a counted unicode string. Conversion may be done inplace, that is Ansi == Unicode.
Arguments:
Ansi is the counted ansi string to convert to UNICODE Unicode is the buffer to place the converted string into
Return Value:
ERROR_SUCCESS or an error code
--*/ { PCHAR APtr; PWCHAR WPtr; ULONG AnsiSize, UnicodeSize; ULONG Status; AnsiSize = *((PUSHORT)Ansi); APtr = WmipAlloc(AnsiSize + 1); if (APtr != NULL) { memcpy(APtr, Ansi + sizeof(USHORT), AnsiSize); APtr[AnsiSize] = 0; WPtr = NULL; Status = AnsiToUnicode(APtr, &WPtr); if (Status == ERROR_SUCCESS) { UnicodeSize = (wcslen(WPtr)+1) * sizeof(WCHAR); *Unicode = (USHORT)UnicodeSize; memcpy(Unicode+1, WPtr, UnicodeSize); Status = ERROR_SUCCESS; WmipFree(WPtr); } WmipFree(APtr); } else { Status = ERROR_NOT_ENOUGH_MEMORY; } return(Status); }
ULONG WmipCountedUnicodeToCountedAnsi( PWCHAR Unicode, PCHAR Ansi ) /*++
Routine Description:
Translate a counted ansi string into a counted unicode string. Conversion may be done inplace, that is Ansi == Unicode.
Arguments:
Unicode is the counted unicode string to convert to ansi
Ansi is the buffer to place the converted string into Return Value:
ERROR_SUCCESS or an error code
--*/ { PCHAR APtr; PWCHAR WPtr; ULONG AnsiSize, UnicodeSize; ULONG Status; UnicodeSize = *Unicode; WPtr = WmipAlloc(UnicodeSize + sizeof(WCHAR)); if (WPtr != NULL) { memcpy(WPtr, Unicode + 1, UnicodeSize); WPtr[UnicodeSize/sizeof(WCHAR)] = UNICODE_NULL;
APtr = NULL; Status = UnicodeToAnsi(WPtr, &APtr, &AnsiSize); if (Status == ERROR_SUCCESS) { *((PUSHORT)Ansi) = (USHORT)AnsiSize; memcpy(Ansi+sizeof(USHORT), APtr, AnsiSize); Status = ERROR_SUCCESS; WmipFree(APtr); } WmipFree(WPtr); } else { Status = ERROR_NOT_ENOUGH_MEMORY; } return(Status); }
ULONG WmipCopyStringToCountedUnicode( LPCWSTR String, PWCHAR CountedString, ULONG *BytesUsed, BOOLEAN ConvertFromAnsi ) /*++
Routine Description:
This routine will copy an ansi ro unicode C string to a counted unicode string. Arguments:
String is the ansi or unicode incoming string Counted string is a pointer to where to write counted unicode string *BytesUsed returns number of bytes used to build counted unicode string ConvertFromAnsi is TRUE if String is an ANSI string
Return Value:
ERROR_SUCCESS or an error code
--*/ { USHORT StringSize; PWCHAR StringPtr = CountedString+1; ULONG Status; if (ConvertFromAnsi) { StringSize = (strlen((PCHAR)String) +1) * sizeof(WCHAR); Status = AnsiToUnicode((PCHAR)String, &StringPtr); } else { StringSize = (wcslen(String) +1) * sizeof(WCHAR); wcscpy(StringPtr, String); Status = ERROR_SUCCESS; } *CountedString = StringSize; *BytesUsed = StringSize + sizeof(USHORT);
return(Status); }
|