DPAPI-NG を使用してデータを暗号化しようとしていますが、NCryptProtectSecretの実行に失敗し、次のように返されます。
0x80090034 (NTE_ENCRYPTION_FAILURE)
ローカル ユーザー SID でNCryptCreateProtectionDescriptorを作成しました。
"SID=S-1-5-21-2942599413-360359348-3087651068-500"
次に、記述子のこのインスタンスをNCryptProtectSecretの入力として使用しますが、機能しません。
次の保護記述子を使用する場合:
"LOCAL=user"
すべて問題ないように見えますが、ユーザーまたはグループの SID では機能しません。Windows Server 2012R2 および Windows Server 2016 でこれをテストしました。
何か案が?
コードサンプルは次のとおりです。
SECURITY_STATUS Status;
PBYTE ProtectedData = NULL;
ULONG ProtectedDataLength = 0;
NCRYPT_DESCRIPTOR_HANDLE DescriptorHandle = NULL;
LPCWSTR ProtectionDescString = L"SID=S-1-5-21-2942599413-360359348-3087651068-500";
Status = NCryptCreateProtectionDescriptor(
ProtectionDescString,
0,
&DescriptorHandle
);
// Status is ERROR_SUCCESS (zero)
LPCWSTR SecretString = L"Some message to protect";
PBYTE Secret = (PBYTE)SecretString;
DWORD SecretLength = (ULONG)( (wcslen(SecretString)+1)*sizeof(WCHAR) );
Status = NCryptProtectSecret(
DescriptorHandle,
0,
PlainText,
PlainTextLength,
NULL, // Use default allocations by LocalAlloc/LocalFree
NULL, // Use default parent windows handle.
&ProtectedData, // out LocalFree
&ProtectedDataLength
);
**// Status == NTE_ENCRYPTION_FAILURE**