代码之家  ›  专栏  ›  技术社区  ›  user7649139

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

  •  1
  • user7649139  · 技术社区  · 7 年前

    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 回复  |  直到 7 年前
        1
  •  5
  •   user2371524 user2371524    7 年前

    没有什么可以转换的。 PCSZ 是一个 C S 字符串 Z ero终止。所以,只是 const char * char * 隐式转换为 .

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