// WinXPChk.cpp : A small program runs inside IExpress package to check if the current // platform is Windows XP. If so, run home network wizard directly. If not, continue // the rest of IExpress installation by installing the specified INF file. // // Usage: WinXPChk hnwcli.inf,DefaultInstall #include "stdafx.h" #include typedef UINT (CALLBACK* LPFNDLLFUNC1)(HWND,HINSTANCE, LPSTR, int); void ShowErrMsg(LPSTR msg) { LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL ); // Process any inserts in lpMsgBuf. // Display the string. MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION ); // Free the buffer. LocalFree( lpMsgBuf ); } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { DWORD dwVersion; dwVersion = GetVersion(); HINSTANCE hDLL; // Handle to DLL LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer UINT uReturnVal = 0; if (LOBYTE(LOWORD(dwVersion)) == 5 && HIBYTE(LOWORD(dwVersion)) >= 1) //if (IsOS(OS_WHISTLERORGREATER)) { // It is an XP box, run home network wizard directly. hDLL = LoadLibrary("hnetwiz.dll"); if (hDLL != NULL) { lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL, "HomeNetWizardRunDll"); if (!lpfnDllFunc1) { // handle the error ShowErrMsg("HomeNetWizardRunDll"); FreeLibrary(hDLL); return -1; } else { // call the function uReturnVal = lpfnDllFunc1(NULL, hInstance, lpCmdLine, nCmdShow); FreeLibrary(hDLL); return uReturnVal; } } else { ShowErrMsg("hnetwiz.dll"); return -1; } } else { // check to see if upnpui.dll is installed. Use different INF files depending on its // presence in the system. TCHAR szDllPath[MAX_PATH]; LPSTR szParam = TEXT("NoUPnP.inf,DefaultInstall");; if (GetSystemDirectory(szDllPath, MAX_PATH) != 0) { PathAppend(szDllPath, TEXT("upnpui.dll")); if (PathFileExists(szDllPath)) { szParam = TEXT("HasUPnP.inf,DefaultInstall"); } } hDLL = LoadLibrary("advpack.dll"); if (hDLL != NULL) { lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL, "LaunchINFSection"); if (!lpfnDllFunc1) { // handle the error ShowErrMsg("LaunchINFSection"); FreeLibrary(hDLL); return -1; } else { // call the function uReturnVal = lpfnDllFunc1(NULL, hInstance, szParam, nCmdShow); FreeLibrary(hDLL); return uReturnVal; } } else { ShowErrMsg("advpack.dll"); return -1; } } return 0; }