Есть ли способ использовать DATA_BLOB в Python? - PullRequest
0 голосов
/ 16 октября 2019

, поэтому я создал DLL-файл C ++ и хотел бы использовать его в python, это не моя проблема. Моя проблема заключается в типе возврата функций DLL, у меня есть 2 функции, обе они возвращают DATA_BLOB , и я не нашел способа использовать DATA_BLOB в Python, мойВопрос в том, как я могу использовать DATA_BLOB в Python.

1 Ответ

1 голос
/ 17 октября 2019

Тип возврата функции DLL обычно является результатом выполнения функции. Если вам нужно вернуть данные, укажите их в параметрах и используйте указатель.

Образец DLL:

BOOL DLLCall1(PDATA_BLOB DataOut) //return DATA_BLOB pointer
{
    DATA_BLOB DataIn;
    BYTE* pbDataInput = (BYTE*)"Hello world of data protection.";
    DWORD cbDataInput = strlen((char*)pbDataInput) + 1;

    //--------------------------------------------------------------------
    // Initialize the DataIn structure.

    DataIn.pbData = pbDataInput;
    DataIn.cbData = cbDataInput;

    CryptProtectData(
        &DataIn,
        L"This is the description string.", // A description string
                                            // to be included with the
                                            // encrypted data. 
        NULL,                               // Optional entropy not used.
        NULL,                               // Reserved.
        NULL,                               // Pass NULL for the 
                                            // prompt structure.
        0,
        DataOut);


    return 1;
}

BOOL DLLCall2(DATA_BLOB DataOut)
{
    LPWSTR pDescrOut = NULL;
    DATA_BLOB DataVerify;
    CRYPTPROTECT_PROMPTSTRUCT PromptStruct;
    ZeroMemory(&PromptStruct, sizeof(PromptStruct));
    PromptStruct.cbSize = sizeof(PromptStruct);
    PromptStruct.dwPromptFlags = CRYPTPROTECT_PROMPT_ON_PROTECT;
    PromptStruct.szPrompt = L"This is a user prompt.";
    if (CryptUnprotectData(
        &DataOut,
        &pDescrOut,
        NULL,                 // Optional entropy
        NULL,                 // Reserved
        &PromptStruct,        // Optional PromptStruct
        0,
        &DataVerify))
    {
        printf("The decrypted data is: %s\n", DataVerify.pbData);
        printf("The description of the data was: %S\n", pDescrOut);
        return 1;
    }
    return 0;
}

python:

from ctypes import *
from ctypes.wintypes import DWORD
import ctypes

class DATA_BLOB(Structure):
    _fields_ = [
        ("cbData", DWORD),
        ("pbData", POINTER(c_char)),
    ]
lib = cdll.LoadLibrary("C:\\Test.dll")
blobOut = DATA_BLOB()
lib.DLLCall1(byref(blobOut))
lib.DLLCall2(blobOut)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...