241 lines
5.4 KiB
C++
241 lines
5.4 KiB
C++
|
#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;
|
||
|
}
|