waliedassar

Detect VirtualBox (innotek trick)

Oct 4th, 2012
1,466
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //http://waleedassar.blogspot.com (@waleedassar)
  2. //MS VC++ 2005 + DirectX SDK
  3. #include "stdafx.h"
  4. #include "dxdiag.h"
  5. #include "stdio.h"
  6.  
  7. int main(int argc, _TCHAR* argv[])
  8. {
  9.     HRESULT hr=CoInitialize(0);
  10.     if(!SUCCEEDED(hr)) return 0;
  11.     IDxDiagProvider* pProvider = NULL;
  12.     hr=CoCreateInstance(CLSID_DxDiagProvider,0,CLSCTX_INPROC_SERVER,IID_IDxDiagProvider,(void**)&pProvider );
  13.     if(!SUCCEEDED(hr))
  14.     {
  15.         CoUninitialize();
  16.         return 0;
  17.     }
  18.     DXDIAG_INIT_PARAMS InitParams={0};
  19.     InitParams.dwSize=sizeof(DXDIAG_INIT_PARAMS);
  20.     InitParams.dwDxDiagHeaderVersion=DXDIAG_DX9_SDK_VERSION;
  21.     InitParams.bAllowWHQLChecks=false;
  22.     hr=pProvider->Initialize(&InitParams);
  23.     if(SUCCEEDED(hr))
  24.     {
  25.           IDxDiagContainer* pDxDiagRoot=0;
  26.           IDxDiagContainer* pDxDiagSystemInfo=0;
  27.           hr=pProvider->GetRootContainer(&pDxDiagRoot );
  28.           if(SUCCEEDED(hr))
  29.           {
  30.                 hr=pDxDiagRoot->GetChildContainer( L"DxDiag_SystemInfo", &pDxDiagSystemInfo );
  31.                 if(SUCCEEDED(hr) )
  32.                 {
  33.                        VARIANT varX;
  34.                        hr=pDxDiagSystemInfo->GetProp( L"szSystemManufacturerEnglish",&varX);
  35.                        if( SUCCEEDED(hr)&&varX.vt==VT_BSTR && SysStringLen(varX.bstrVal)!=0)
  36.                        {
  37.                            wchar_t* pMan=varX.bstrVal;
  38.                            wprintf(L"System Manufacturer is %s\r\n",pMan);
  39.                            if(!_wcsicmp(pMan,L"innotek GmbH"))
  40.                            {
  41.                                printf("VirtualBox detected\r\n");
  42.                            }
  43.                        }
  44.                        VariantClear(&varX);
  45.                        hr=pDxDiagSystemInfo->GetProp( L"szSystemModelEnglish",&varX);
  46.                        if( SUCCEEDED(hr)&&varX.vt==VT_BSTR && SysStringLen(varX.bstrVal)!=0)
  47.                        {
  48.                            wchar_t* pMan=varX.bstrVal;
  49.                            wprintf(L"System Model is %s\r\n",pMan);
  50.                            if(!_wcsicmp(pMan,L"VirtualBox"))
  51.                            {
  52.                                printf("VirtualBox detected\r\n");
  53.                            }
  54.                        }
  55.                        VariantClear(&varX);
  56.                        pDxDiagSystemInfo->Release();
  57.                 }
  58.                 pDxDiagRoot->Release();
  59.         }
  60.         //pProvider->Release();
  61.     }
  62.     CoUninitialize();
  63.     return 0;
  64. }
RAW Paste Data