如何将 char *(字符指针)转换为 PCSZ?

How convert char * (char pointer) to PCSZ?

我有一个方法,它有一个强制参数 char*,我想在 RtlInitiAnsiString() 之前转换为 PCSZ,在 [=16= 之后转换为 uName ] 是正确的值。

我该怎么做?

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);

没有可转换的内容。 PCSZPC 的一个 String Z ero 终止。所以,它只是 const char *char * 可隐式转换为 const char *.

我认为这样的typedef可怕,但不幸的是,Microsoft API 大量使用它们。