windows-nt/Source/XPSP1/NT/shell/ext/hnw/setup/winxpchk.cpp
2020-09-26 16:20:57 +08:00

133 lines
2.9 KiB
C++

// 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 <shlwapi.h>
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;
}