748 lines
31 KiB
C
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);
|