Ich arbeite unter der VS2013 ARM Developer Prompt. Ich versuche, Microsofts Cryptography Next Generation (CNG) zu verwenden, aber ich habe einige nicht-triviale Probleme.Welche Header für einen NTSTATUS beim Erstellen für ARM-Plattformen enthalten?
Ich versuche, ein einfaches Testprogramm zu kompilieren:
#include <windows.h>
#include <bcrypt.h>
int main(int argc, char* argv[])
{
BCRYPT_ALG_HANDLE hProvider = NULL;
NTSTATUS ret = BCryptOpenAlgorithmProvider(&hProvider, BCRYPT_RNG_ALGORITHM, MS_PRIMITIVE_PROVIDER, 0);
if (!(BCRYPT_SUCCESS(ret)))
{
return -1;
}
unsigned char buffer[20];
ret = BCryptGenRandom(hProvider, buffer, (ULONG)sizeof(buffer), 0);
if (!(BCRYPT_SUCCESS(ret)))
{
return -2;
}
ret = BCryptCloseAlgorithmProvider(hProvider, 0);
if (!(BCRYPT_SUCCESS(ret)))
{
return -3;
}
return 0;
}
ich es mit zu kompilieren versuchen:
C:\Users\Test>cl.exe /nologo /W4 /D_MBCS /Zi /TP /EHs c /MD /FI sdkddkver.h /FI winapifamily.h /DWINAPI_FAMILY=WINAPI_FAMILY_APP /c test.cxx
Microsoft (R) C/C++ Optimizing Compiler Version 18.00.21005.1 for ARM
Copyright (C) Microsoft Corporation. All rights reserved.
test.cxx
test.cxx(6) : error C2065: 'BCRYPT_ALG_HANDLE' : undeclared identifier
test.cxx(6) : error C2146: syntax error : missing ';' before identifier 'hProvid
er'
test.cxx(6) : error C2065: 'hProvider' : undeclared identifier
test.cxx(7) : error C2065: 'NTSTATUS' : undeclared identifier
test.cxx(7) : error C2146: syntax error : missing ';' before identifier 'ret'
test.cxx(7) : error C2065: 'ret' : undeclared identifier
test.cxx(7) : error C2065: 'hProvider' : undeclared identifier
test.cxx(7) : error C2065: 'BCRYPT_RNG_ALGORITHM' : undeclared identifier
test.cxx(7) : error C2065: 'MS_PRIMITIVE_PROVIDER' : undeclared identifier
test.cxx(7) : error C3861: 'BCryptOpenAlgorithmProvider': identifier not found
test.cxx(8) : error C2065: 'ret' : undeclared identifier
test.cxx(8) : error C3861: 'BCRYPT_SUCCESS': identifier not found
test.cxx(14) : error C2065: 'ret' : undeclared identifier
test.cxx(14) : error C2065: 'hProvider' : undeclared identifier
test.cxx(14) : error C3861: 'BCryptGenRandom': identifier not found
test.cxx(15) : error C2065: 'ret' : undeclared identifier
test.cxx(15) : error C3861: 'BCRYPT_SUCCESS': identifier not found
test.cxx(20) : error C2065: 'ret' : undeclared identifier
test.cxx(20) : error C2065: 'hProvider' : undeclared identifier
test.cxx(20) : error C3861: 'BCryptCloseAlgorithmProvider': identifier not found
test.cxx(21) : error C2065: 'ret' : undeclared identifier
test.cxx(21) : error C3861: 'BCRYPT_SUCCESS': identifier not found
Als ich von PJ Naughter's blog enthalten <ntstatus.h>
(verschrottet versuchen, weil ich es kann‘ Es scheint, als ob Sie etwas Nützliches von Microsoft finden:
cl.exe /nologo /W4 /D_MBCS /Zi /TP /EHsc /MD /FI sdkddkver.h /FI winapifamily.h /DWINAPI_FAMILY=WINAPI_FAMILY_APP /c osrng.cpp
osrng.cpp
C:\Program Files (x86)\Windows Kits\8.1\include\shared\ntstatus.h(66) : warning
C4005: 'STATUS_WAIT_0' : macro redefinition
C:\Program Files (x86)\Windows Kits\8.1\include\um\winnt.h(2202) : see p
revious definition of 'STATUS_WAIT_0'
C:\Program Files (x86)\Windows Kits\8.1\include\shared\ntstatus.h(212) : warning
C4005: 'STATUS_ABANDONED_WAIT_0' : macro redefinition
C:\Program Files (x86)\Windows Kits\8.1\include\um\winnt.h(2203) : see p
revious definition of 'STATUS_ABANDONED_WAIT_0'
C:\Program Files (x86)\Windows Kits\8.1\include\shared\ntstatus.h(235) : warning
C4005: 'STATUS_USER_APC' : macro redefinition
...
Ich kann es nicht ein LONG
machen, weil Microsoft-Makros wie BCRYPT_SUCCESS
es zu einem Code NTSTATUS
werfen.
Ich kann auch das fehlende NTSTATUS
Problem unter VS2012 ARM Developer Prompt duplizieren.
Welche Header-Datei sollte ich hinzufügen, um eine Erklärung für NTSTATUS
unter ARM zu erhalten?
ich denken dies könnten verwandt sein, aber ich bin nicht sicher: fatal error LNK1104: cannot open file 'bcrypt.lib' when building for Surface RT tablet. Über allem, was ich weiß, ist dieses Zeug nicht gut von Microsoft getestet, weil es zu viele verdammte Probleme gibt, die versuchen, es zu verwenden.
Dank Chuck. Es scheint, dass alle Microsoft-Dokumente gebrochen sind. Siehe zum Beispiel ['BCryptOpenAlgorithmProvider '] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa375479%28v=vs.85%29.aspx), [' BCryptGenRandom'] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa375458%28v=vs.85%29.aspx) und ['BCryptCloseAlgorithmProvider'] (https://msdn.microsoft.com/de -us/Bibliothek/Windows/Desktop/aa375377% 28v = vs.85% 29.aspx). – jww
Sie sagen alle "Windows Store-Apps", weil diese APIs für Windows 10 unterstützt werden. Ich stimme zu, dass es nicht hilfreich ist, dass "UWP" oder "Windows 10" nicht erwähnt werden UWP nicht Windows 8.x Store. –
Danke nochmal Chuck. Würde es Ihnen etwas ausmachen, sich [Präprozessor-Definitionen für Universal Windows Platform?] (Http://stackoverflow.com/q/36072350). Diese Fragen halten den Port einiger C/C++ - Bibliotheken aufrecht, mit denen ich arbeite (OpenSSL, Crypto ++, Cryptlib und Botan). – jww