windows-nt/Source/XPSP1/NT/shell/ext/hnw/wizard/dllload.c
2020-09-26 16:20:57 +08:00

748 lines
31 KiB
C

#include "stdafx.h"
#include <msprintx.h>
#include "shlwapi.h"
#define _NO_NETSHARE_WRAPPERS_
#include "mysvrapi.h"
#define _NO_UNICWRAP_WRAPPERS_
#include "unicwrap.h"
#include "newapi.h"
#include <netcon.h>
#include <rasdlg.h>
#include <tapi.h>
#define NO_LOADING_OF_SHDOCVW_ONLY_FOR_WHICHPLATFORM
#include "..\..\..\inc\dllload.c"
#include <port32.h> // for BOOLFROMPTR used in DELAY_LOAD_NAME_VOID
typedef enum _NETSETUP_NAME_TYPE {
NetSetupUnknown = 0,
NetSetupMachine,
NetSetupWorkgroup,
NetSetupDomain,
NetSetupNonExistentDomain,
#if(_WIN32_WINNT >= 0x0500)
NetSetupDnsMachine
#endif
} NETSETUP_NAME_TYPE, *PNETSETUP_NAME_TYPE;
// -----------shlwapi.dll---------------
HMODULE g_hmodSHLWAPI = NULL;
#undef wvnsprintfW
DELAY_LOAD_NAME(g_hmodSHLWAPI, SHLWAPI, int, _wvnsprintfW, wvnsprintfW,
(LPWSTR lpOut, int cchLimitIn, LPCWSTR lpFmt, va_list arglist),
(lpOut, cchLimitIn, lpFmt, arglist));
DELAY_LOAD_NAME_HRESULT(g_hmodSHLWAPI, SHLWAPI, _StrRetToBufW, StrRetToBufW,
(STRRET* psr, LPCITEMIDLIST pidl, LPWSTR pszBuf, UINT cchBuf),
(psr, pidl, pszBuf, cchBuf));
DELAY_LOAD_ORD_ERR(g_hmodSHLWAPI, SHLWAPI, DWORD, _FormatMessageWrapW, 68,
(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, va_list* Arguments),
(dwFlags, lpSource, dwMessageId, dwLanguageId, lpBuffer, nSize, Arguments), 0);
DELAY_LOAD_ORD_VOID(g_hmodSHLWAPI, SHLWAPI, _SHSetWindowBits, 165,
(HWND hWnd, int iWhich, DWORD dwBits, DWORD dwValue),
(hWnd, iWhich, dwBits, dwValue));
DELAY_LOAD_ORD_ERR(g_hmodSHLWAPI, SHLWAPI, int, _SHAnsiToUnicode, 215,
(LPCSTR pszSrc, LPWSTR pwszDst, int cwchBuf),
(pszSrc, pwszDst, cwchBuf), 0);
DELAY_LOAD_ORD_ERR(g_hmodSHLWAPI, SHLWAPI, int, _SHAnsiToUnicodeCP, 216,
(UINT uiCP, LPCSTR pszSrc, LPWSTR pwszDst, int cwchBuf),
(uiCP, pszSrc, pwszDst, cwchBuf), 0);
DELAY_LOAD_ORD_ERR(g_hmodSHLWAPI, SHLWAPI, int, _SHUnicodeToAnsi, 217,
(LPCWSTR pwszSrc, LPSTR pszDst, int cchBuf),
(pwszSrc, pszDst, cchBuf), 0);
DELAY_LOAD_ORD_ERR(g_hmodSHLWAPI, SHLWAPI, BOOL, _GUIDFromStringA, 269,
(LPCSTR psz, GUID *pguid),
(psz, pguid), FALSE);
DELAY_LOAD_ORD_ERR(g_hmodSHLWAPI, SHLWAPI, UINT, _WhichPlatform, 276,
(void),
(), PLATFORM_UNKNOWN);
DELAY_LOAD_ORD_ERR(g_hmodSHLWAPI, SHLWAPI, BOOL, _WritePrivateProfileStringWrapW, 298,
(LPCWSTR pwzAppName, LPCWSTR pwzKeyName, LPCWSTR pwzString, LPCWSTR pwzFileName),
(pwzAppName, pwzKeyName, pwzString, pwzFileName), FALSE);
DELAY_LOAD_ORD_ERR(g_hmodSHLWAPI, SHLWAPI, BOOL, _ExtTextOutWrapW, 299,
(HDC hdc, int x, int y, UINT fuOptions, CONST RECT *lprc, LPCWSTR lpStr, UINT cch, CONST INT *lpDx),
(hdc, x, y, fuOptions, lprc, lpStr, cch, lpDx), FALSE);
DELAY_LOAD_ORD_ERR(g_hmodSHLWAPI, SHLWAPI, HINSTANCE, _LoadLibraryWrapW, 309,
(LPCWSTR pwzLibFileName),
(pwzLibFileName), NULL);
DELAY_LOAD_ORD_ERR(g_hmodSHLWAPI, SHLWAPI, BOOL, _SHGetPathFromIDListWrapW, 334,
(LPCITEMIDLIST pidl, LPWSTR pwzPath),
(pidl, pwzPath), FALSE);
DELAY_LOAD_ORD_ERR(g_hmodSHLWAPI, SHLWAPI, BOOL, _SetFileAttributesWrapW, 338,
(LPCWSTR pwzFile, DWORD dwFileAttributes),
(pwzFile, dwFileAttributes), FALSE);
DELAY_LOAD_ORD_ERR(g_hmodSHLWAPI, SHLWAPI, int, _MessageBoxWrapW, 340,
(HWND hwnd, LPCWSTR pwzText, LPCWSTR pwzCaption, UINT uType),
(hwnd, pwzText, pwzCaption, uType), 0);
DELAY_LOAD_ORD_ERR(g_hmodSHLWAPI, SHLWAPI, BOOL, _CreateProcessWrapW, 369,
(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation),
(lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation), FALSE);
DELAY_LOAD_ORD_VOID(g_hmodSHLWAPI, SHLWAPI, _SHChangeNotify, 394,
(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2),
(wEventId, uFlags, dwItem1, dwItem2));
// -----------hhctrl.ocx---------------
HMODULE g_hmodHHCtrl = NULL;
DELAY_LOAD_EXT(g_hmodHHCtrl, hhctrl, OCX, HWND, HtmlHelpA,
(HWND hwndCaller, LPCSTR pszFile, UINT uCommand, DWORD dwData),
(hwndCaller, pszFile, uCommand, dwData))
// --------- Shell32.dll (NT) -----------
HINSTANCE g_hinstSHELL32 = NULL;
DELAY_LOAD_NAME(g_hinstSHELL32, SHELL32, BOOL, LinkWindow_RegisterClass_NT, LinkWindow_RegisterClass, (), ());
DELAY_LOAD_NAME(g_hinstSHELL32, SHELL32, LPITEMIDLIST, ILCreateFromPathW_NT, ILCreateFromPathW, (LPCWSTR pszPath), (pszPath));
#undef SHGetFileInfoW
DELAY_LOAD_NAME(g_hinstSHELL32, SHELL32, DWORD_PTR, SHGetFileInfoW_NT, SHGetFileInfoW,
(LPCWSTR pszPath, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT cbFileInfo, UINT uFlags),
(pszPath, dwFileAttributes, psfi, cbFileInfo, uFlags));
// --------- KERNEL32.DLL (NT) ----------
HINSTANCE g_hinstKERNEL32 = NULL;
DELAY_LOAD_NAME(g_hinstKERNEL32, KERNEL32, BOOL, SetComputerNameExW_NT, SetComputerNameExW,
(COMPUTER_NAME_FORMAT NameType, LPCWSTR lpBuffer),
(NameType, lpBuffer));
DELAY_LOAD_NAME(g_hinstKERNEL32, KERNEL32, BOOL, GetComputerNameExW_NT, GetComputerNameExW,
(COMPUTER_NAME_FORMAT NameType, LPWSTR lpBuffer, LPDWORD lpnSize),
(NameType, lpBuffer, lpnSize));
// --------- NETSHELL.DLL (NT) ----------
HINSTANCE g_hinstNETSHELL = NULL;
DELAY_LOAD_VOID(g_hinstNETSHELL, NETSHELL, NcFreeNetconProperties,
(NETCON_PROPERTIES* pprops),
(pprops));
// --------- ADVAPI32.DLL (NT) ----------
HINSTANCE g_hinstADVAPI = NULL;
DELAY_LOAD_NAME(g_hinstADVAPI, ADVAPI32, BOOL, AllocateAndInitializeSid_NT, AllocateAndInitializeSid,
(PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority, BYTE nSubAuthorityCount, DWORD dwSubAuthority0, DWORD dwSubAuthority1, DWORD dwSubAuthority2, DWORD dwSubAuthority3, DWORD dwSubAuthority4, DWORD dwSubAuthority5, DWORD dwSubAuthority6, DWORD dwSubAuthority7, PSID *pSid),
(pIdentifierAuthority, nSubAuthorityCount, dwSubAuthority0, dwSubAuthority1, dwSubAuthority2, dwSubAuthority3, dwSubAuthority4, dwSubAuthority5, dwSubAuthority6, dwSubAuthority7, pSid));
DELAY_LOAD_NAME(g_hinstADVAPI, ADVAPI32, BOOL, CheckTokenMembership_NT, CheckTokenMembership,
(HANDLE TokenHandle, PSID SidToCheck, PBOOL IsMember),
(TokenHandle, SidToCheck, IsMember));
DELAY_LOAD_NAME(g_hinstADVAPI, ADVAPI32, PVOID, FreeSid_NT, FreeSid,
(PSID SidToFree),
(SidToFree));
// --------- TAPI32.DLL ---------------
/*
HINSTANCE g_hinstTAPI32 = NULL;
DELAY_LOAD(g_hinstTAPI32, TAPI32, LONG, lineInitializeExW,
(LPHLINEAPP lphLineApp, HINSTANCE hInstance, LINECALLBACK lpfnCallback, LPCWSTR lpszFriendlyAppName, LPDWORD lpdwNumDevs, LPDWORD lpdwAPIVersion, LPLINEINITIALIZEEXPARAMS lpLineInitializeExParams),
(lphLineApp, hInstance, lpfnCallback, lpszFriendlyAppName, lpdwNumDevs, lpdwAPIVersion, lpLineInitializeExParams));
DELAY_LOAD(g_hinstTAPI32, TAPI32, LONG, lineInitializeExA,
(LPHLINEAPP lphLineApp, HINSTANCE hInstance, LINECALLBACK lpfnCallback, LPCSTR lpszFriendlyAppName, LPDWORD lpdwNumDevs, LPDWORD lpdwAPIVersion, LPLINEINITIALIZEEXPARAMS lpLineInitializeExParams),
(lphLineApp, hInstance, lpfnCallback, lpszFriendlyAppName, lpdwNumDevs, lpdwAPIVersion, lpLineInitializeExParams));
*/
// --------- RASDLG.DLL ---------------
HINSTANCE g_hinstRASDLG = NULL;
DELAY_LOAD_BOOL(g_hinstRASDLG, RASDLG, RasDialDlgW,
(LPWSTR lpszPhoneBook, LPWSTR lpszEntry, LPWSTR lpszPhoneNumber, LPRASDIALDLG lpInfo),
(lpszPhoneBook, lpszEntry, lpszPhoneNumber, lpInfo));
DELAY_LOAD_BOOL(g_hinstRASDLG, RASDLG, RasDialDlgA,
(LPSTR lpszPhoneBook, LPSTR lpszEntry, LPSTR lpszPhoneNumber, LPRASDIALDLG lpInfo),
(lpszPhoneBook, lpszEntry, lpszPhoneNumber, lpInfo));
// --------- RASAPI32.DLL ---------------
HINSTANCE g_hinstRASAPI32 = NULL;
DELAY_LOAD_DWORD(g_hinstRASAPI32, RASAPI32, RasGetEntryPropertiesW,
(LPCWSTR lpszPhoneBook, LPCWSTR lpszEntry, LPRASENTRYW lpRasEntryW, LPDWORD lpdwEntryInfoSize, LPBYTE lpbDeviceInfo, LPDWORD lpdwDeviceInfoSize),
(lpszPhoneBook, lpszEntry, lpRasEntryW, lpdwEntryInfoSize, lpbDeviceInfo, lpdwDeviceInfoSize));
DELAY_LOAD_DWORD(g_hinstRASAPI32, RASAPI32, RasGetEntryPropertiesA,
(LPCSTR lpszPhoneBook, LPCSTR lpszEntry, LPRASENTRYA lpRasEntryA, LPDWORD lpdwEntryInfoSize, LPBYTE lpbDeviceInfo, LPDWORD lpdwDeviceInfoSize),
(lpszPhoneBook, lpszEntry, lpRasEntryA, lpdwEntryInfoSize, lpbDeviceInfo, lpdwDeviceInfoSize));
DELAY_LOAD_DWORD(g_hinstRASAPI32, RASAPI32, RasEnumEntriesW,
(LPCWSTR reserved, LPCWSTR pszPhoneBookPath, LPRASENTRYNAMEW pRasEntryNameW, LPDWORD pcb, LPDWORD pcEntries),
(reserved, pszPhoneBookPath, pRasEntryNameW, pcb, pcEntries));
DELAY_LOAD_DWORD(g_hinstRASAPI32, RASAPI32, RasEnumEntriesA,
(LPCSTR reserved, LPCSTR pszPhoneBookPath, LPRASENTRYNAMEA pRasEntryNameA, LPDWORD pcb, LPDWORD pcEntries),
(reserved, pszPhoneBookPath, pRasEntryNameA, pcb, pcEntries));
DELAY_LOAD_DWORD(g_hinstRASAPI32, RASAPI32, RasSetEntryDialParamsW,
(LPCWSTR pszPhonebook, LPRASDIALPARAMSW lpRasDialParamsW, BOOL fRemovePassword),
(pszPhonebook, lpRasDialParamsW, fRemovePassword));
DELAY_LOAD_DWORD(g_hinstRASAPI32, RASAPI32, RasSetEntryDialParamsA,
(LPCSTR pszPhonebook, LPRASDIALPARAMSA lpRasDialParamsA, BOOL fRemovePassword),
(pszPhonebook, lpRasDialParamsA, fRemovePassword));
DELAY_LOAD_DWORD(g_hinstRASAPI32, RASAPI32, RasGetEntryDialParamsW,
(LPCWSTR pszPhonebook, LPRASDIALPARAMSW lpRasDialParamsW, LPBOOL pfRemovePassword),
(pszPhonebook, lpRasDialParamsW, pfRemovePassword));
DELAY_LOAD_DWORD(g_hinstRASAPI32, RASAPI32, RasGetEntryDialParamsA,
(LPCSTR pszPhonebook, LPRASDIALPARAMSA lpRasDialParamsA, LPBOOL pfRemovePassword),
(pszPhonebook, lpRasDialParamsA, pfRemovePassword));
DELAY_LOAD_DWORD(g_hinstRASAPI32, RASAPI32, RasSetEntryPropertiesW,
(LPCWSTR pszPhonebook, LPCWSTR pszEntry, LPRASENTRYW pRasEntryW, DWORD cbRasEntry, LPBYTE pbDeviceConfig, DWORD cbDeviceConfig),
(pszPhonebook, pszEntry, pRasEntryW, cbRasEntry, pbDeviceConfig, cbDeviceConfig));
DELAY_LOAD_DWORD(g_hinstRASAPI32, RASAPI32, RasSetEntryPropertiesA,
(LPCSTR pszPhonebook, LPCSTR pszEntry, LPRASENTRYA pRasEntryA, DWORD cbRasEntry, LPBYTE pbDeviceConfig, DWORD cbDeviceConfig),
(pszPhonebook, pszEntry, pRasEntryA, cbRasEntry, pbDeviceConfig, cbDeviceConfig));
DELAY_LOAD_DWORD(g_hinstRASAPI32, RASAPI32, RnaGetDefaultAutodialConnection,
(LPSTR szBuffer, DWORD cchBuffer, LPDWORD lpdwOptions),
(szBuffer, cchBuffer, lpdwOptions));
DELAY_LOAD_DWORD(g_hinstRASAPI32, RASAPI32, RnaSetDefaultAutodialConnection,
(LPSTR szEntry, DWORD dwOptions),
(szEntry, dwOptions));
// Only on NT (rasapi32.dll)
//DELAY_LOAD_DWORD(g_hinstRASAPI32, RASAPI32, RasShareConnection,
// (LPRASSHARECONN pConn, GUID* pPrivateLanGuid),
// (pConn, pPrivateLanGuid));
//DELAY_LOAD_DWORD(g_hinstRASAPI32, RASAPI32, RasUnshareConnection,
// (PBOOL pfWasShared),
// (pfWasShared));
// --------- OLE32.DLL ----------------
HINSTANCE g_hmodOLE32 = NULL;
// CoSetProxyBlanket not available on W95 Gold ole32.dll
DELAY_LOAD_NAME_HRESULT(g_hmodOLE32, OLE32, CoSetProxyBlanket_NT, CoSetProxyBlanket,
(IUnknown* pProxy, DWORD dwAuthnSvc, DWORD dwAuthzSvc, OLECHAR* pServerPrincName, DWORD dwAuthnLevel, DWORD dwImpLevel, RPC_AUTH_IDENTITY_HANDLE pAuthInfo, DWORD dwCapabilities),
(pProxy, dwAuthnSvc, dwAuthzSvc, pServerPrincName, dwAuthnLevel, dwImpLevel, pAuthInfo, dwCapabilities));
// --------- MPR.DLL ----------------
HINSTANCE g_hmodMPR = NULL;
DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetOpenEnumW,
(DWORD dwScope, DWORD dwType, DWORD dwUsage, LPNETRESOURCEW lpNetResource, LPHANDLE lphEnum),
(dwScope, dwType, dwUsage, lpNetResource, lphEnum));
DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetOpenEnumA,
(DWORD dwScope, DWORD dwType, DWORD dwUsage, LPNETRESOURCEA lpNetResource, LPHANDLE lphEnum),
(dwScope, dwType, dwUsage, lpNetResource, lphEnum));
DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetEnumResourceW,
(HANDLE hEnum, LPDWORD lpcCount, LPVOID lpBuffer, LPDWORD lpBufferSize),
(hEnum, lpcCount, lpBuffer, lpBufferSize));
DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetEnumResourceA,
(HANDLE hEnum, LPDWORD lpcCount, LPVOID lpBuffer, LPDWORD lpBufferSize),
(hEnum, lpcCount, lpBuffer, lpBufferSize));
DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetCloseEnum, (HANDLE hEnum), (hEnum));
DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetGetUserW,
(LPCWSTR lpName, LPWSTR lpUserName, LPDWORD lpnLength),
(lpName, lpUserName, lpnLength));
DELAY_LOAD_WNET(g_hmodMPR, MPR, WNetGetUserA,
(LPCSTR lpName, LPSTR lpUserName, LPDWORD lpnLength),
(lpName, lpUserName, lpnLength));
// --------- WINSPOOL.DRV ----------------
HINSTANCE g_hinstWINSPOOL_DRV = NULL;
DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, EnumPrintersW,
(DWORD dwFlags, LPWSTR psz1, DWORD dw1, LPBYTE pb1, DWORD dw2, LPDWORD pdw2, LPDWORD pdw3),
(dwFlags, psz1, dw1, pb1, dw2, pdw2, pdw3));
DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, EnumPrintersA,
(DWORD dwFlags, LPSTR psz1, DWORD dw1, LPBYTE pb1, DWORD dw2, LPDWORD pdw2, LPDWORD pdw3),
(dwFlags, psz1, dw1, pb1, dw2, pdw2, pdw3));
DELAY_LOAD_EXT(g_hinstWINSPOOL_DRV, WINSPOOL, DRV, BOOL, GetDefaultPrinter, // NT only
(LPTSTR szDefaultPrinter, LPDWORD pcch),
(szDefaultPrinter, pcch));
DELAY_LOAD_NAME_EXT_ERR(g_hinstWINSPOOL_DRV, Win32Spl, DRV, BOOL, OpenPrinter_NT, OpenPrinterW,
(LPWSTR pPrinterName, LPHANDLE phPrinter, LPPRINTER_DEFAULTSW pDefault),
(pPrinterName, phPrinter, pDefault), 0);
DELAY_LOAD_NAME_EXT_ERR(g_hinstWINSPOOL_DRV, Win32Spl, DRV, BOOL, ClosePrinter_NT, ClosePrinter,
(HANDLE hPrinter),
(hPrinter), 0);
DELAY_LOAD_NAME_EXT_ERR(g_hinstWINSPOOL_DRV, Win32Spl, DRV, BOOL, GetPrinter_NT, GetPrinterW,
(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD pcbNeeded),
(hPrinter, Level, pPrinter, cbBuf, pcbNeeded), 0);
DELAY_LOAD_NAME_EXT_ERR(g_hinstWINSPOOL_DRV, Win32Spl, DRV, BOOL, SetPrinter_NT, SetPrinterW,
(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD Command),
(hPrinter, Level, pPrinter, Command), 0);
// --------- SVRAPI.DLL (w9x) ----------------
HINSTANCE g_hinstSVRAPI = NULL;
DELAY_LOAD_NAME_ERR(g_hinstSVRAPI, SVRAPI, DWORD, NetShareEnum_W95, NetShareEnum,
(const char FAR * pszServer, short sLevel, char FAR * pbBuffer, unsigned short cbBuffer, unsigned short FAR * pcEntriesRead, unsigned short FAR * pcTotalAvail),
(pszServer, sLevel, pbBuffer, cbBuffer, pcEntriesRead, pcTotalAvail), ~NERR_Success);
DELAY_LOAD_NAME_ERR(g_hinstSVRAPI, SVRAPI, DWORD, NetShareAdd_W95, NetShareAdd,
(const char FAR * pszServer, short sLevel, const char FAR * pbBuffer, unsigned short cbBuffer),
(pszServer, sLevel, pbBuffer, cbBuffer), ~NERR_Success);
DELAY_LOAD_NAME_ERR(g_hinstSVRAPI, SVRAPI, DWORD, NetShareDel_W95, NetShareDel,
(const char FAR * pszServer, const char FAR * pszNetName, unsigned short usReserved),
(pszServer, pszNetName, usReserved), ~NERR_Success);
DELAY_LOAD_NAME_ERR(g_hinstSVRAPI, SVRAPI, DWORD, NetShareGetInfo_W95, NetShareGetInfo,
(const char FAR * pszServer, const char FAR * pszNetName, short sLevel, char FAR * pbBuffer, unsigned short cbBuffer, unsigned short FAR * pcbTotalAvail),
(pszServer, pszNetName, sLevel, pbBuffer, cbBuffer, pcbTotalAvail), ~NERR_Success);
DELAY_LOAD_NAME_ERR(g_hinstSVRAPI, SVRAPI, DWORD, NetShareSetInfo_W95, NetShareSetInfo,
(const char FAR * pszServer, const char FAR * pszNetName, short sLevel, const char FAR * pbBuffer, unsigned short cbBuffer, short sParmNum),
(pszServer, pszNetName, sLevel, pbBuffer, cbBuffer, sParmNum), ~NERR_Success);
// --------- NETAPI32.DLL (NT) ----------------
HINSTANCE g_hinstNETAPI32 = NULL;
DELAY_LOAD_NAME_DWORD(g_hinstNETAPI32, NETAPI32, NetShareEnum_NT, NetShareEnum,
(LPWSTR pszServer, DWORD level, LPBYTE * ppbuffer, DWORD cbbuffer, LPDWORD pcEntriesRead, LPDWORD pcTotalEntries, LPDWORD dsResumeHandle),
(pszServer, level, ppbuffer, cbbuffer, pcEntriesRead, pcTotalEntries, dsResumeHandle));
DELAY_LOAD_NAME_DWORD(g_hinstNETAPI32, NETAPI32, NetShareAdd_NT, NetShareAdd,
(LPWSTR servername, DWORD level, LPBYTE buf, LPDWORD parm_err),
(servername, level, buf, parm_err));
DELAY_LOAD_NAME_DWORD(g_hinstNETAPI32, NETAPI32, NetShareDel_NT, NetShareDel,
(LPWSTR servername, LPWSTR netname, DWORD reserved),
(servername, netname, reserved));
DELAY_LOAD_NAME_DWORD(g_hinstNETAPI32, NETAPI32, NetShareGetInfo_NT, NetShareGetInfo,
(LPWSTR servername, LPWSTR netname, DWORD level, LPBYTE *bufptr),
(servername, netname, level, bufptr));
DELAY_LOAD_NAME_DWORD(g_hinstNETAPI32, NETAPI32, NetShareSetInfo_NT, NetShareSetInfo,
(LPWSTR servername, LPWSTR netname, DWORD level, LPBYTE buf, LPDWORD parm_err),
(servername, netname, level, buf, parm_err));
DELAY_LOAD_NAME_DWORD(g_hinstNETAPI32, NETAPI32, NetServerGetInfo_NT, NetServerGetInfo,
(LPWSTR servername, DWORD level, LPBYTE* pbuf),
(servername, level, pbuf));
DELAY_LOAD_NAME_DWORD(g_hinstNETAPI32, NETAPI32, NetServerSetInfo_NT, NetServerSetInfo,
(LPWSTR servername, DWORD level, LPBYTE buf, LPDWORD parm_err),
(servername, level, buf, parm_err));
DELAY_LOAD_NAME_DWORD(g_hinstNETAPI32, NETAPI32, NetApiBufferFree_NT, NetApiBufferFree,
(LPVOID Buffer), (Buffer));
DELAY_LOAD_DWORD(g_hinstNETAPI32, NETAPI32, NetValidateName,
(LPCWSTR pszServer, LPCWSTR pszName, LPCWSTR pszAccount, LPCWSTR pszPassword, NETSETUP_NAME_TYPE NameType),
(pszServer, pszName, pszAccount, pszPassword, NameType));
// We only use NetGetJoinInformation on NT anyway
DELAY_LOAD_DWORD(g_hinstNETAPI32, NETAPI32, NetGetJoinInformation,
(LPWSTR servername, LPWSTR* pbuffer, LPDWORD type),
(servername, pbuffer, type));
DELAY_LOAD_DWORD(g_hinstNETAPI32, NETAPI32, NetJoinDomain,
(LPCWSTR lpServer, LPCWSTR lpDomain, LPCWSTR lpAccountOU, LPCWSTR lpAccount, LPCWSTR lpPassword, DWORD fJoinOptions),
(lpServer, lpDomain, lpAccountOU, lpAccount, lpPassword, fJoinOptions));
DELAY_LOAD_DWORD(g_hinstNETAPI32, NETAPI32, NetUnjoinDomain,
(LPCWSTR lpServer, LPCWSTR lpAccount, LPCWSTR lpPassword, DWORD fUnjoinOptions),
(lpServer, lpAccount, lpPassword, fUnjoinOptions));
// ws2_32 for Network Location Awareness (NT)
HINSTANCE g_hinstWS2_32 = NULL;
DELAY_LOAD_NAME(g_hinstWS2_32, ws2_32, int, WSAStartup_NT, WSAStartup,
(WORD wVersionRequested, LPWSADATA lpWSAData),
(wVersionRequested, lpWSAData));
DELAY_LOAD_NAME(g_hinstWS2_32, ws2_32, int, WSAGetLastError_NT, WSAGetLastError,
(),
());
DELAY_LOAD_NAME(g_hinstWS2_32, ws2_32, int, WSACleanup_NT, WSACleanup,
(),
());
DELAY_LOAD_NAME(g_hinstWS2_32, ws2_32, int, WSALookupServiceEnd_NT, WSALookupServiceEnd,
(HANDLE hLookup),
(hLookup));
DELAY_LOAD_NAME(g_hinstWS2_32, ws2_32, int, WSALookupServiceBegin_NT, WSALookupServiceBegin,
(LPWSAQUERYSET lpqsRestrictions, DWORD dwControlFlags, LPHANDLE lphLookup),
(lpqsRestrictions, dwControlFlags, lphLookup));
DELAY_LOAD_NAME(g_hinstWS2_32, ws2_32, int, WSALookupServiceNext_NT, WSALookupServiceNext,
(HANDLE hLookup, DWORD dwControlFlags, LPDWORD lpdwBufferLength, LPWSAQUERYSET lpqsResults),
(hLookup, dwControlFlags, lpdwBufferLength, lpqsResults));
// --------- NCONN Thunks ----------------
#include "netconn.h"
BOOL g_fRunningOnNT;
//
// The thunk macros do the following:
//
// 1. Create a delay load W9x function for the given API using the delay
// load map macros with Ncxp32.dll and a W9x_ prefix for the
// function name.
//
// 2. Create a delay load NT function for the given API using the delay
// load map macros with NCxpNT.dll and a NT_ prefix for the function
// name.
//
// 3. Create the exported API of the given name that checks what platform
// we're currently running on and calls the W9x or NT delay loaded
// version of the API.
//
#define W9x_NT_THUNK(_W9xhinst, _W9xdll, _NThinst, _NTdll, _ret, _fn, _args, _nargs, _err) \
\
DELAY_LOAD_NAME_ERR(_NThinst, _NTdll, _ret, NT_##_fn, _fn, _args, _nargs, _err);\
\
DELAY_LOAD_NAME_ERR(_W9xhinst, _W9xdll, _ret, W9x_##_fn, _fn, _args, _nargs, _err);\
\
_ret _stdcall _fn _args \
{ \
_ret ret; \
\
if (g_fRunningOnNT) \
{ \
ret = NT_##_fn _nargs; \
} \
else \
{ \
ret = W9x_##_fn _nargs; \
} \
\
return ret; \
}
#define W9x_NT_THUNK_VOID(_W9xhinst, _W9xdll, _NThinst, _NTdll, _fn, _args, _nargs) \
\
DELAY_LOAD_NAME_VOID(_NThinst, _NTdll, NT_##_fn, _fn, _args, _nargs);\
\
DELAY_LOAD_NAME_VOID(_W9xhinst, _W9xdll, W9x_##_fn, _fn, _args, _nargs);\
\
void _stdcall _fn _args \
{ \
if (g_fRunningOnNT) \
{ \
NT_##_fn _nargs; \
} \
else \
{ \
W9x_##_fn _nargs; \
} \
}
//
// Delay load thunk declarations for ncxpnt.dll and ncxp32.dll.
//
HINSTANCE g_hNcxp32 = NULL;
HINSTANCE g_hNcxpNT = NULL;
#define W9x_NT_NCONN_THUNK(_ret, _fn, _args, _nargs, _err) \
W9x_NT_THUNK(g_hNcxp32, ncxp32, g_hNcxpNT, ncxpnt, _ret, _fn, _args, _nargs, _err)
#define W9x_NT_NCONN_THUNK_VOID(_fn, _args, _nargs) \
W9x_NT_THUNK_VOID(g_hNcxp32, ncxp32, g_hNcxpNT, ncxpnt, _fn, _args, _nargs)
W9x_NT_NCONN_THUNK (LPVOID,
NetConnAlloc,
(DWORD cbAlloc),
(cbAlloc),
NULL);
W9x_NT_NCONN_THUNK_VOID (NetConnFree,
(LPVOID pMem),
(pMem));
W9x_NT_NCONN_THUNK (BOOL,
IsProtocolInstalled,
(LPCWSTR pszProtocolDeviceID, BOOL bExhaustive),
(pszProtocolDeviceID, bExhaustive),
FALSE);
W9x_NT_NCONN_THUNK (HRESULT,
InstallProtocol,
(LPCWSTR pszProtocol, HWND hwndParent, PROGRESS_CALLBACK pfnCallback, LPVOID pvCallbackParam),
(pszProtocol, hwndParent, pfnCallback, pvCallbackParam),
E_FAIL);
W9x_NT_NCONN_THUNK (HRESULT,
InstallTCPIP,
(HWND hwndParent, PROGRESS_CALLBACK pfnProgress, LPVOID pvProgressParam),
(hwndParent, pfnProgress, pvProgressParam),
E_FAIL);
W9x_NT_NCONN_THUNK (HRESULT,
RemoveProtocol,
(LPCWSTR pszProtocol),
(pszProtocol),
E_FAIL);
W9x_NT_NCONN_THUNK (BOOL,
IsMSClientInstalled,
(BOOL bExhaustive),
(bExhaustive),
FALSE);
W9x_NT_NCONN_THUNK (HRESULT,
InstallMSClient,
(HWND hwndParent, PROGRESS_CALLBACK pfnProgress, LPVOID pvProgressParam),
(hwndParent, pfnProgress, pvProgressParam),
E_FAIL);
W9x_NT_NCONN_THUNK (HRESULT,
EnableBrowseMaster,
(),
(),
E_FAIL);
W9x_NT_NCONN_THUNK (BOOL,
IsSharingInstalled,
(BOOL bExhaustive),
(bExhaustive),
FALSE);
W9x_NT_NCONN_THUNK (BOOL,
IsFileSharingEnabled,
(),
(),
FALSE);
W9x_NT_NCONN_THUNK (BOOL,
IsPrinterSharingEnabled,
(),
(),
FALSE);
W9x_NT_NCONN_THUNK (HRESULT,
InstallSharing,
(HWND hwndParent, PROGRESS_CALLBACK pfnProgress, LPVOID pvProgressParam),
(hwndParent, pfnProgress, pvProgressParam),
E_FAIL);
W9x_NT_NCONN_THUNK (BOOL,
FindConflictingService,
(LPCWSTR pszWantService, NETSERVICE* pConflict),
(pszWantService, pConflict),
FALSE);
W9x_NT_NCONN_THUNK (int,
EnumNetAdapters,
(NETADAPTER FAR** pprgNetAdapters),
(pprgNetAdapters),
0);
W9x_NT_NCONN_THUNK (HRESULT,
InstallNetAdapter,
(LPCWSTR pszDeviceID, LPCWSTR pszInfPath, HWND hwndParent, PROGRESS_CALLBACK pfnProgress, LPVOID pvCallbackParam),
(pszDeviceID, pszInfPath, hwndParent, pfnProgress, pvCallbackParam),
E_FAIL);
W9x_NT_NCONN_THUNK (BOOL,
IsAccessControlUserLevel,
(),
(),
FALSE);
W9x_NT_NCONN_THUNK (HRESULT,
DisableUserLevelAccessControl,
(),
(),
E_FAIL);
W9x_NT_NCONN_THUNK (HRESULT,
EnableQuickLogon,
(),
(),
E_FAIL);
W9x_NT_NCONN_THUNK (HRESULT,
DetectHardware,
(LPCWSTR pszDeviceID),
(pszDeviceID),
E_FAIL);
W9x_NT_NCONN_THUNK (BOOL,
IsProtocolBoundToAdapter,
(LPCWSTR pszProtocolID, const NETADAPTER* pAdapter),
(pszProtocolID, pAdapter),
FALSE);
W9x_NT_NCONN_THUNK (HRESULT,
EnableNetAdapter,
(const NETADAPTER* pAdapter),
(pAdapter),
E_FAIL);
W9x_NT_NCONN_THUNK (BOOL,
IsClientInstalled,
(LPCWSTR pszClient, BOOL bExhaustive),
(pszClient, bExhaustive),
FALSE);
W9x_NT_NCONN_THUNK (HRESULT,
RemoveClient,
(LPCWSTR pszClient),
(pszClient),
E_FAIL);
W9x_NT_NCONN_THUNK (HRESULT,
RemoveGhostedAdapters,
(LPCWSTR pszDeviceID),
(pszDeviceID),
E_FAIL);
W9x_NT_NCONN_THUNK (HRESULT,
RemoveUnknownAdapters,
(LPCWSTR pszDeviceID),
(pszDeviceID),
E_FAIL);
W9x_NT_NCONN_THUNK (BOOL,
DoesAdapterMatchDeviceID,
(const NETADAPTER* pAdapter, LPCWSTR pszDeviceID),
(pAdapter, pszDeviceID),
FALSE);
W9x_NT_NCONN_THUNK (BOOL,
IsAdapterBroadband,
(const NETADAPTER* pAdapter),
(pAdapter),
FALSE);
W9x_NT_NCONN_THUNK_VOID (SaveBroadbandSettings,
(LPCWSTR pszBroadbandAdapterNumber),
(pszBroadbandAdapterNumber));
W9x_NT_NCONN_THUNK (BOOL,
UpdateBroadbandSettings,
(LPWSTR pszEnumKeyBuf, int cchEnumKeyBuf),
(pszEnumKeyBuf, cchEnumKeyBuf),
FALSE);
W9x_NT_NCONN_THUNK_VOID (EnableAutodial,
(BOOL bAutodial, LPCWSTR pszConnection),
(bAutodial, pszConnection));
W9x_NT_NCONN_THUNK (BOOL,
IsAutodialEnabled,
(void),
(),
FALSE);
W9x_NT_NCONN_THUNK_VOID (SetDefaultDialupConnection,
(LPCWSTR pszConnectionName),
(pszConnectionName));
W9x_NT_NCONN_THUNK_VOID (GetDefaultDialupConnection,
(LPWSTR pszConnectionName, int cchMax),
(pszConnectionName, cchMax));
W9x_NT_NCONN_THUNK (int,
EnumMatchingNetBindings,
(LPCWSTR pszParentBinding, LPCWSTR pszDeviceID, LPWSTR** pprgBindings),
(pszParentBinding, pszDeviceID, pprgBindings),
0);
W9x_NT_NCONN_THUNK (HRESULT,
RestartNetAdapter,
(DWORD devnode),
(devnode),
E_FAIL);
W9x_NT_NCONN_THUNK (HRESULT,
HrFromLastWin32Error,
(void),
(),
E_FAIL);
W9x_NT_NCONN_THUNK (HRESULT,
HrWideCharToMultiByte,
(const WCHAR* szwString, char** ppszString),
(szwString, ppszString),
E_FAIL);
W9x_NT_NCONN_THUNK (HRESULT,
HrEnableDhcp,
(VOID* pContext, DWORD dwFlags),
(pContext, dwFlags),
E_FAIL);
W9x_NT_NCONN_THUNK (BOOLEAN,
IsAdapterDisconnected,
(VOID* pContext),
(pContext),
FALSE);
W9x_NT_NCONN_THUNK (HRESULT,
IcsUninstall,
(void),
(),
E_FAIL);
//
// Delay load thunk declarations for internet connection sharing.
//
HINSTANCE g_hicsapi32 = NULL;
HINSTANCE g_hicsapint = NULL;
#define W9x_NT_ICS_THUNK(_ret, _fn, _args, _nargs, _err) \
W9x_NT_THUNK(g_hicsapi32, icsapi32, g_hicsapint, dontknow, _ret, _fn, _args, _nargs, _err)
W9x_NT_ICS_THUNK(DWORD, IcsEnable, (DWORD dwOptions), (dwOptions), 0);
W9x_NT_ICS_THUNK(DWORD, IcsDisable, (DWORD dwOptions), (dwOptions), 0);
W9x_NT_ICS_THUNK(BOOLEAN, IsIcsEnabled, (), (), FALSE);
W9x_NT_ICS_THUNK(BOOLEAN, IsIcsAvailable, (), (), FALSE);