ITpmVirtualSmartCardManager::CreateVirtualSmartCard PIN-код установлен неправильно

Я следую этой теме, чтобы создать TPM Vistual Smnart Card, после запуска приложения виртуальная смарт-карта создана и может отображаться в диспетчере устройств, но когда я пытаюсь вставить PIN-код 123456789 для аутентификации, отображается неверный PIN-код

#include "Tpmvscmgr.h"    
#include  "StrSafe.h"
#pragma comment (lib, "Vscmgr.lib")
#include <Windows.h>

HRESULT CoCreateInstanceAsAdmin(HWND hwnd, REFCLSID rclsid, REFIID riid, __out void ** ppv)
{
 BIND_OPTS3 bo;
 WCHAR  wszCLSID[50];
 WCHAR  wszMonikerName[300];

 StringFromGUID2(rclsid, wszCLSID, sizeof(wszCLSID) / sizeof(wszCLSID[0]));
 HRESULT hr = StringCchPrintfW(wszMonikerName, sizeof(wszMonikerName) / sizeof(wszMonikerName[0]), L"Elevation:Administrator!new:%s", wszCLSID);
 if (FAILED(hr))
  return hr;
 memset(&bo, 0, sizeof(bo));
 bo.cbStruct = sizeof(bo);
 bo.hwnd = hwnd;
 bo.dwClassContext = CLSCTX_LOCAL_SERVER;
 return CoGetObject(wszMonikerName, &bo, riid, ppv);
}

int main()
{
 HRESULT hr = S_OK;
 HWND hwnd = NULL;
 ITpmVirtualSmartCardManager *pObj = NULL;
 CoInitialize(NULL);
 hr = CoCreateInstanceAsAdmin(
  hwnd,
  CLSID_TpmVirtualSmartCardManager,
  IID_ITpmVirtualSmartCardManager,
  (void**)&pObj);


 //ITpmVirtualSmartCardManager *pObj = NULL;
 LPWSTR friendly = L"Friendly";
 LPWSTR out = L"";
 BYTE pin[] = "123456789";
 DWORD size = sizeof(pin);
 BOOL boot;

 hr = pObj->CreateVirtualSmartCard(friendly, TPMVSC_DEFAULT_ADMIN_ALGORITHM_ID, pin, size, NULL, 0, pin, size, pin, size, false, NULL, &out, &boot);

 return 0;
}

Кто-нибудь знает, в чем проблема?


person Peyman    schedule 05.12.2019    source источник


Ответы (1)


  • Четвертый параметр для CreateVirtualSmartCard() должно быть 24. В любом случае, это не должно быть то же самое, что и PIN-код.
  • sizeof(pin) в этом случае вернет 10, потому что нулевой терминатор включен в вычисление размера. Это то, что делает TpmVscMgr?
person mnistic    schedule 07.12.2019
comment
Спасибо, да, я знал о размере = 24, я забыл обновить здесь. Но вы правы, нам не нужно передавать нулевой терминатор. после удаления последнего символа он работает правильно :) - person Peyman; 09.12.2019