|
|
#include "isignup.h"
typedef DWORD (WINAPI *WNETGETUSER) (LPCTSTR lpName, LPTSTR lpUserName, LPDWORD lpnLength);
typedef DWORD (WINAPI * WNETLOGON) (LPCTSTR lpProvider, HWND hwndOwner);
#ifdef WIN16
#define MB_SETFOREGROUND 0
#define NO_ERROR ERROR_SUCCESS
//
// MessageId: ERROR_NO_NETWORK
//
// MessageText:
//
// The network is not present or not started.
//
#define ERROR_NO_NETWORK 1222L
//
// MessageId: ERROR_NOT_LOGGED_ON
//
// MessageText:
//
// The operation being requested was not performed because the user
// has not logged on to the network.
// The specified service does not exist.
//
#define ERROR_NOT_LOGGED_ON 1245L
//
// MessageId: ERROR_NOT_CONNECTED
//
// MessageText:
//
// This network connection does not exist.
//
#define ERROR_NOT_CONNECTED 2250L
#endif
#ifdef UNICODE
BOOL WINAPI AutoDialLogonW(HWND, LPCTSTR, DWORD, LPDWORD); BOOL WINAPI AutoDialLogonA ( HWND hwndParent, LPCSTR lpszEntry, DWORD dwFlags, LPDWORD pdwRetCode ) { TCHAR szEntry[RAS_MaxEntryName + 1];
mbstowcs(szEntry, lpszEntry, lstrlenA(lpszEntry)+1); return AutoDialLogonW(hwndParent, szEntry, dwFlags, pdwRetCode); }
BOOL WINAPI AutoDialLogonW #else
BOOL WINAPI AutoDialLogonA #endif
( HWND hwndParent, LPCTSTR lpszEntry, DWORD dwFlags, LPDWORD pdwRetCode ) { DWORD dwRet; TCHAR szUser[80]; DWORD size; HINSTANCE hLib; WNETLOGON lpfnWNetLogon; WNETGETUSER lpfnWNetGetUser;
hLib = LoadLibrary(TEXT("mpr.dll")); if ((HINSTANCE)32 >= hLib) { return 0; }
#ifdef UNICODE
lpfnWNetLogon = (WNETLOGON) GetProcAddress(hLib, "WNetLogonW"); lpfnWNetGetUser = (WNETGETUSER) GetProcAddress(hLib, "WNetGetUserW"); #else
lpfnWNetLogon = (WNETLOGON) GetProcAddress(hLib, "WNetLogonA"); lpfnWNetGetUser = (WNETGETUSER) GetProcAddress(hLib, "WNetGetUserA"); #endif
if (NULL == lpfnWNetLogon || NULL == lpfnWNetGetUser) { FreeLibrary(hLib); return 0; }
size = sizeof(szUser); dwRet = lpfnWNetGetUser(NULL, szUser, &size); if (NO_ERROR != dwRet) { LPTSTR lpszErr; TCHAR szMsg[256]; TCHAR szCaption[256]; dwRet = GetLastError();
LoadString( ghInstance, IDS_LOGONMESSAGE, szMsg, SIZEOF_TCHAR_BUFFER(szMsg));
LoadString( ghInstance, IDS_LOGONCAPTION, szCaption, SIZEOF_TCHAR_BUFFER(szCaption));
switch (dwRet) { case ERROR_NOT_LOGGED_ON: while (1) { dwRet = lpfnWNetLogon(NULL, NULL);
if (WN_CANCEL != dwRet) { break; } if (MessageBox( hwndParent, szMsg, szCaption, MB_SETFOREGROUND | MB_ICONWARNING | MB_RETRYCANCEL) == IDCANCEL) { break; } } break;
case ERROR_NO_NETWORK: lpszErr = TEXT("No Network"); break;
case ERROR_NOT_CONNECTED: lpszErr = TEXT("Not Connected"); break; default: lpszErr = TEXT("Who knows?"); break; }
MessageBox(NULL, lpszErr, TEXT("WNetGetUser returned"), MB_OK); }
FreeLibrary(hLib);
*pdwRetCode = ERROR_SUCCESS; return FALSE; }
DWORD SignupLogon( HWND hwndParent ) { DWORD dwRet; TCHAR szUser[80]; DWORD size; HINSTANCE hLib; WNETLOGON lpfnWNetLogon; WNETGETUSER lpfnWNetGetUser;
hLib = LoadLibrary(TEXT("mpr.dll")); if ((HINSTANCE)32 >= hLib) { return GetLastError(); }
#ifdef UNICODE
lpfnWNetLogon = (WNETLOGON) GetProcAddress(hLib, "WNetLogonW"); lpfnWNetGetUser = (WNETGETUSER) GetProcAddress(hLib, "WNetGetUserW"); #else
lpfnWNetLogon = (WNETLOGON) GetProcAddress(hLib, "WNetLogonA"); lpfnWNetGetUser = (WNETGETUSER) GetProcAddress(hLib, "WNetGetUserA"); #endif
if (NULL == lpfnWNetLogon || NULL == lpfnWNetGetUser) { FreeLibrary(hLib); return ERROR_SUCCESS; }
size = sizeof(szUser); dwRet = lpfnWNetGetUser(NULL, szUser, &size); if (NO_ERROR != dwRet) { TCHAR szMsg[256];
dwRet = GetLastError();
LoadString( ghInstance, IDS_SIGNUPLOGON, szMsg, SIZEOF_TCHAR_BUFFER(szMsg));
if (ERROR_NOT_LOGGED_ON == dwRet) { while (1) { dwRet = lpfnWNetLogon(NULL, NULL);
if (WN_CANCEL != dwRet) { dwRet = ERROR_SUCCESS; break; } if (MessageBox( hwndParent, szMsg, cszAppName, MB_SETFOREGROUND | MB_ICONWARNING | MB_RETRYCANCEL) == IDCANCEL) { dwRet = ERROR_CANCELLED; break; } } } }
FreeLibrary(hLib);
return dwRet; }
|