Gostaria de obter o número da versão do Windows SDK com a qual um programa está sendo compilado em tempo de compilação, como 10.0.22621.0 .
O mais próximo que consegui chegar foi algo assim:
#include <iostream>
#include <sstream>
#include <windows.h>
std::string NTDDIToFriendlyVersion(DWORD ntddiVersion) {
DWORD major = (ntddiVersion & 0xFF000000) >> 24;
DWORD minor = (ntddiVersion & 0x00FF0000) >> 16;
DWORD build = (ntddiVersion & 0x0000FFFF);
std::ostringstream oss;
oss << major << "." << minor << "." << build;
return oss.str();
}
int main() {
std::cout << "WDK_NTDDI_VERSION is: " << std::hex << WDK_NTDDI_VERSION <<
" (" << NTDDIToFriendlyVersion(WDK_NTDDI_VERSION) << ")\n";
}
que basicamente apenas disseca a WDK_NTDDI_VERSION
constante definida em C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\shared\sdkddkver.h
.
Resultado que obtenho:
NTDDI_VERSION is: a00000c (10.0.12)
Eu prefiro obter o 10.0.22621.0
em vez de10.0.12
Marquei C e C++ porque realmente não me importo.
Se você estiver executando no MsBuild e/ou VisualStudio, você pode adicionar algo assim ao seu .vcxproj:
Isso criará um
SDKInfo.h
arquivo no seu projeto (antes dos destinos de compilação) que definirá oCOMPILATION_INCLUDEPATH
identificador e seu valor será uma lista concatenada de caminhos incluídos no momento da compilação do projeto.Isto contém caminhos exatos do SDK. Você pode postar a análise em tempo de execução ou definir uma tarefa mais complexa (isso pode ser feito em linha com código C#) para incluir apenas o que você precisa em tempo de compilação. Aqui está a aparência deste arquivo para mim:
Como bônus, também adicionei o caminho e a versão mais recentes do SDK instalado (pode ser diferente do que seu projeto usa) do registro.