Указатель на массив указателей структуры

Мне нужно создать указатель на массив указателей, создать несколько ключей с этой структурой WFSPINKEYDETAILEX CEN / XFS.

Структура в вопросе. Указатель на массив указателей с нулевым символом в конце.

typedef struct _wfs_pin_key_detail_ex
{
LPSTR lpsKeyName;
DWORD dwUse;
BYTE bGeneration;
BYTE bVersion;
BYTE bActivatingDate[4];
BYTE bExpiryDate[4];
BOOL bLoaded;
} WFSPINKEYDETAILEX, * LPWFSPINKEYDETAILEX;

Структура WFSRESULT:

typedef struct _wfs_result
{
REQUESTID       RequestID;
HSERVICE        hService;
SYSTEMTIME      tsTimestamp;
HRESULT         hResult;
union {
DWORD       dwCommandCode;
DWORD       dwEventID;
} u;
LPVOID          lpBuffer;
} WFSRESULT, *LPWFSRESULT;

Моя программа:

HRESULT WINAPI WFPGetInfo(HSERVICE hService, DWORD dwCategory, LPVOID lpQueryDetails, DWORD dwTimeOut, HWND hWnd, REQUESTID ReqID) {
WFSPINKEYDETAILEX** ppPinKeyDetail;
WFSRESULT * lpWFSResult;
HRESULT result;
const int PINKEYS = 1;

result = WFMAllocateBuffer(sizeof(WFSRESULT), WFS_MEM_ZEROINIT | WFS_MEM_SHARE, (void**)&lpWFSResult);

if(result != WFS_SUCCESS){
return WFS_ERR_INTERNAL_ERROR;
}

result = WFMAllocateMore(sizeof(WFSPINKEYDETAILEX*) * (PINKEYS+1), lpWFSResult, (void**)&ppPinKeyDetail);

lpWFSResult->hService=hService;
lpWFSResult->RequestID=ReqID;
lpWFSResult->u.dwCommandCode=WFS_INF_PIN_KEY_DETAIL_EX;
lpWFSResult->hResult=WFS_SUCCESS;

if(dwCategory == WFS_INF_PIN_KEY_DETAIL_EX){
for(int i = 0; i < PINKEYS; i++){
result = WFMAllocateMore(sizeof(WFSPINKEYDETAILEX), lpWFSResult, (void**)&ppPinKeyDetail[i]);
}

//This block repeats 5 times with different values...

WFSPINKEYDETAILEX& ppKeyDetail(*ppPinKeyDetail[0]);
ppKeyDetail.lpsKeyName = (LPSTR) "DEVICE_KBPK";
ppKeyDetail.dwUse = WFS_PIN_USESECURECONSTRUCT;
ppKeyDetail.bLoaded = TRUE;
ppKeyDetail.bVersion = 0xFF;
ppKeyDetail.bGeneration = 0xFF;
ppKeyDetail.bActivatingDate[0] = 0xFF;
ppKeyDetail.bActivatingDate[1] = 0xFF;
ppKeyDetail.bActivatingDate[2] = 0xFF;
ppKeyDetail.bActivatingDate[3] = 0xFF;
ppKeyDetail.bExpiryDate[0] = 0xFF;
ppKeyDetail.bExpiryDate[1] = 0xFF;
ppKeyDetail.bExpiryDate[2] = 0xFF;
ppKeyDetail.bExpiryDate[3] = 0xFF;

//This block repeats 5 times with different values...
//...

lpWFSResult->lpBuffer = ppPinKeyDetail;
}
}

Последняя программа компилируется, проблема в том, что когда я запускаю приложение в качестве поставщика услуг, оно игнорирует этот массив ключей.

Журнал приложения с использованием поставщика услуг готов:

Key: DEVICE_KBPK.
dwUses: 1024.
bLoaded: 1.
bGeneration: FF.
bVersion: FF.
bActivatingDate: FF FF FF FF.
bExpiryDate: FF FF FF FF.
Generation unpack: .
Version unpack: .
ActivatingDate unpack: .
Expiry Date unpack: .
Key added to vector.

Когда я пользуюсь услугами своего провайдера (из этой темы), это приводит к краху JAVA.

Основное приложение сделано в Java и через JNA потребляет библиотеки DLL

0

Решение

Задача ещё не решена.

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

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