Как конвертировать char * (char pointer) в PCSZ?

У меня есть метод, который имеет обязательный параметр, как char* и я хочу преобразовать в PCSZ до RtlInitiAnsiString() и результат uName после RtlAnsiStringToUnicodeString() быть правильным значением.

Как я могу это сделать?

NTSTATUS myMethod(char *myName)
{
ANSI_STRING aName;
UNICODE_STRING uName;
OBJECT_ATTRIBUTES ObjAttr;

RtlInitAnsiString(&aName, myName);
status = RtlAnsiStringToUnicodeString(&uName, &aName, TRUE);
if(!NT_SUCCESS(status))
{
DbgPrint("RtlAnsiStringToUnicodeString Error");
return status;
}

InitializeObjectAttributes(&ObjAttr, &uName, OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE, NULL, NULL);
// some code here
//...
RtlFreeUnicodeString(&uName);
return status;
}

ВЫПУСК 01:

Чтобы лучше понять, вот как MyMethod() используется в моем драйвере ядра:

struct MyData
{
ULONG Value[3];
char *Str1;
char *Str2;
};

NTSTATUS Function_IRP_DEVICE_CONTROL(PDEVICE_OBJECT pDeviceObject, PIRP Irp)
{
PIO_STACK_LOCATION pIoStackLocation;
struct MyData *pData = (struct MyData*) Irp->AssociatedIrp.SystemBuffer;
pIoStackLocation = IoGetCurrentIrpStackLocation(Irp);
switch (pIoStackLocation->Parameters.DeviceIoControl.IoControlCode)
{
case IOCTL_DATA :
DbgPrint("IOCTL DATA");
DbgPrint("%lu \n %lu \n %lu \n %s \n %s", pData->Value[0], pData->Value[1], pData->Value[2], pData->Str1, pData->Str2);
...
break;
}

...

//////////// Calling MyMethod() //////////////

myMethod(pData->Str1);

1

Решение

Там нет ничего, чтобы преобразовать. PCSZ это пмешать Сonstant SТринг ZАСС прекращено. Так что это просто const char *, char * неявно конвертируется в const char *,

Я считаю такой typedefs какой ужас, но, к сожалению, API-интерфейсы Microsoft активно их используют.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]