#include "headers.hxx" #pragma hdrstop // We wouldn't have to do this if C's semantics for the stringizing macro // weren't so awful. #define APINAME_WNetConnectionDialog2 "WNetConnectionDialog2" #define APINAME_WNetDisconnectDialog2 "WNetDisconnectDialog2" #ifdef UNICODE #define APINAME_WNetGetConnection2 "WNetGetConnection2W" #define APINAME_WNetGetConnection3 "WNetGetConnection3W" #define APINAME_WNetGetProviderType "WNetGetProviderTypeW" #else #define APINAME_WNetGetConnection2 "WNetGetConnection2A" #define APINAME_WNetGetConnection3 "WNetGetConnection3A" #define APINAME_WNetGetProviderType "WNetGetProviderTypeA" #endif //////////////////////////////////////////////////////////////// TCHAR szMprDll[] = TEXT("mpr.dll"); HINSTANCE g_hInstanceMpr = NULL; // if we need to manually load MPR typedef DWORD (*PFNWNETGETCONNECTION2)( LPTSTR lpLocalName, LPVOID lpBuffer, LPDWORD lpBufferSize ); PFNWNETGETCONNECTION2 pfnWNetGetConnection2 = NULL; typedef DWORD (*PFNWNETGETCONNECTION3)( LPCTSTR lpLocalName, LPCTSTR lpProviderName, DWORD dwLevel, LPVOID lpBuffer, LPDWORD lpBufferSize ); PFNWNETGETCONNECTION3 pfnWNetGetConnection3 = NULL; typedef DWORD (*PFNWNETGETPROVIDERTYPE)( LPCTSTR lpProvider, LPDWORD lpdwNetType ); PFNWNETGETPROVIDERTYPE pfnWNetGetProviderType = NULL; typedef DWORD (*PFNWNETCONNECTIONDIALOG2)( HWND hwndParent, DWORD dwType, WCHAR *lpHelpFile, DWORD nHelpContext ); PFNWNETCONNECTIONDIALOG2 pfnWNetConnectionDialog2 = NULL; typedef DWORD (*PFNWNETDISCONNECTDIALOG2)( HWND hwndParent, DWORD dwType, WCHAR *lpHelpFile, DWORD nHelpContext ); PFNWNETDISCONNECTDIALOG2 pfnWNetDisconnectDialog2 = NULL; //////////////////////////////////////////////////////////////// TCHAR szMprUIDll[] = TEXT("mprui.dll"); HINSTANCE g_hInstanceMprUI = NULL; // if we need to manually load MPRUI typedef BOOL (*PFUNC_VALIDATION_CALLBACK)( LPWSTR pszName ); typedef DWORD (*PFNWNETBROWSEDIALOG)( HWND hwndParent, DWORD dwType, WCHAR *lpszName, DWORD cchBufSize, WCHAR *lpszHelpFile, DWORD nHelpContext, PFUNC_VALIDATION_CALLBACK pfuncValidation ); PFNWNETBROWSEDIALOG pfnWNetBrowseDialog = NULL; //////////////////////////////////////////////////////////////// HINSTANCE g_hInstance; //////////////////////////////////////////////////////////////// VOID PlaceIt( HWND hwnd ) { SetForegroundWindow(hwnd); // Use a trick from the property sheet code to properly place the dialog. // Basically, we want it to go wherever a new window would have gone, not // always in the upper-left corner of the screen. This avoids the problem // of multiple dialogs showing up in the same place on the screen, // overlapping each other. const TCHAR c_szStatic[] = TEXT("Static"); HWND hwndT = CreateWindowEx(0, c_szStatic, NULL, WS_OVERLAPPED, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, NULL, NULL, g_hInstance, NULL); if (hwndT) { RECT rc; GetWindowRect(hwndT, &rc); DestroyWindow(hwndT); SetWindowPos(hwnd, NULL, rc.left, rc.top, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE); } } //////////////////////////////////////////////////////////////// // load up the MPR.DLL and get its entrypoints. // Return WN_SUCCESS if ok, else error. Note that we will return success even // if we can't find a particular entrypoint. This allows dynamically loading // entrypoints that exist on one platform/version but not on another. DWORD LoadMpr( VOID ) { if (NULL != g_hInstanceMpr) { return WN_SUCCESS; // already loaded } g_hInstanceMpr = LoadLibrary(szMprDll); if (NULL == g_hInstanceMpr) { return GetLastError(); } pfnWNetGetConnection2 = (PFNWNETGETCONNECTION2)GetProcAddress(g_hInstanceMpr, APINAME_WNetGetConnection2); pfnWNetGetConnection3 = (PFNWNETGETCONNECTION3)GetProcAddress(g_hInstanceMpr, APINAME_WNetGetConnection3); pfnWNetGetProviderType = (PFNWNETGETPROVIDERTYPE)GetProcAddress(g_hInstanceMpr, APINAME_WNetGetProviderType); pfnWNetConnectionDialog2 = (PFNWNETCONNECTIONDIALOG2)GetProcAddress(g_hInstanceMpr, APINAME_WNetConnectionDialog2); pfnWNetDisconnectDialog2 = (PFNWNETDISCONNECTDIALOG2)GetProcAddress(g_hInstanceMpr, APINAME_WNetDisconnectDialog2); return WN_SUCCESS; } // load up the MPRUI.DLL and get its entrypoints. Return WN_SUCCESS if ok, else error DWORD LoadMprUI( VOID ) { if (NULL != g_hInstanceMprUI) { return WN_SUCCESS; // already loaded } g_hInstanceMprUI = LoadLibrary(szMprUIDll); if (NULL == g_hInstanceMprUI) { return GetLastError(); } pfnWNetBrowseDialog = (PFNWNETBROWSEDIALOG)GetProcAddress(g_hInstanceMprUI, "WNetBrowseDialog"); return WN_SUCCESS; } VOID GetUsageString( IN LPTSTR pszBuf, // better be big enough! IN LPNETRESOURCE pnr ) { TCHAR szTemp[MAX_PATH]; pszBuf[0] = TEXT('\0'); DWORD dwUsage = pnr->dwUsage; if (0 != dwUsage) { wsprintf(szTemp, TEXT("%d: "), dwUsage); _tcscat(pszBuf, szTemp); } if (dwUsage & RESOURCEUSAGE_CONNECTABLE) { wsprintf(szTemp, TEXT("connectable (%d) "), RESOURCEUSAGE_CONNECTABLE); _tcscat(pszBuf, szTemp); dwUsage &= ~RESOURCEUSAGE_CONNECTABLE; } if (dwUsage & RESOURCEUSAGE_CONTAINER) { wsprintf(szTemp, TEXT("container (%d) "), RESOURCEUSAGE_CONTAINER); _tcscat(pszBuf, szTemp); dwUsage &= ~RESOURCEUSAGE_CONTAINER; } if (dwUsage & RESOURCEUSAGE_NOLOCALDEVICE) { wsprintf(szTemp, TEXT("no local device (%d) "), RESOURCEUSAGE_NOLOCALDEVICE); _tcscat(pszBuf, szTemp); dwUsage &= ~RESOURCEUSAGE_NOLOCALDEVICE; } if (dwUsage & RESOURCEUSAGE_SIBLING) { wsprintf(szTemp, TEXT("sibling (%d) "), RESOURCEUSAGE_SIBLING); _tcscat(pszBuf, szTemp); dwUsage &= ~RESOURCEUSAGE_SIBLING; } if (dwUsage & RESOURCEUSAGE_RESERVED) { wsprintf(szTemp, TEXT("reserved (%d) "), RESOURCEUSAGE_RESERVED); _tcscat(pszBuf, szTemp); dwUsage &= ~RESOURCEUSAGE_RESERVED; } if (dwUsage != 0) { wsprintf(pszBuf, TEXT("UNKNOWN (%d) "), dwUsage); } } VOID GetScopeString( IN LPTSTR pszBuf, // better be big enough! IN LPNETRESOURCE pnr ) { LPTSTR pszT; switch (pnr->dwScope) { case RESOURCE_CONNECTED: pszT = TEXT("connected"); break; case RESOURCE_GLOBALNET: pszT = TEXT("globalnet"); break; case RESOURCE_REMEMBERED: pszT = TEXT("remembered"); break; case RESOURCE_RECENT: pszT = TEXT("recent"); break; case RESOURCE_CONTEXT: pszT = TEXT("context"); break; default: pszT = TEXT("UNKNOWN"); break; } wsprintf(pszBuf, TEXT("%s (%d)"), pszT, pnr->dwScope); } VOID GetTypeString( IN LPTSTR pszBuf, // better be big enough! IN LPNETRESOURCE pnr ) { LPTSTR pszT; switch (pnr->dwType) { case RESOURCETYPE_ANY: pszT = TEXT("any"); break; case RESOURCETYPE_DISK: pszT = TEXT("disk"); break; case RESOURCETYPE_PRINT: pszT = TEXT("print"); break; case RESOURCETYPE_RESERVED: pszT = TEXT("reserved"); break; case RESOURCETYPE_UNKNOWN: pszT = TEXT("unknown"); break; default: pszT = TEXT("UNKNOWN"); break; } wsprintf(pszBuf, TEXT("%s (%d)"), pszT, pnr->dwType); } VOID GetDisplayTypeString( IN LPTSTR pszBuf, // better be big enough! IN LPNETRESOURCE pnr ) { LPTSTR pszT; switch (pnr->dwDisplayType) { case RESOURCEDISPLAYTYPE_GENERIC: pszT = TEXT("generic"); break; case RESOURCEDISPLAYTYPE_DOMAIN: pszT = TEXT("domain"); break; case RESOURCEDISPLAYTYPE_SERVER: pszT = TEXT("server"); break; case RESOURCEDISPLAYTYPE_SHARE: pszT = TEXT("share"); break; case RESOURCEDISPLAYTYPE_FILE: pszT = TEXT("file"); break; case RESOURCEDISPLAYTYPE_GROUP: pszT = TEXT("group"); break; case RESOURCEDISPLAYTYPE_NETWORK: pszT = TEXT("network"); break; case RESOURCEDISPLAYTYPE_ROOT: pszT = TEXT("root"); break; case RESOURCEDISPLAYTYPE_SHAREADMIN: pszT = TEXT("shareadmin"); break; case RESOURCEDISPLAYTYPE_DIRECTORY: pszT = TEXT("directory"); break; case RESOURCEDISPLAYTYPE_TREE: pszT = TEXT("tree"); break; default: pszT = TEXT("UNKNOWN"); break; } wsprintf(pszBuf, TEXT("%s (%d)"), pszT, pnr->dwDisplayType); } VOID DoError( HWND hwnd, DWORD dwErr ) { TCHAR sz[500]; if (dwErr == WN_EXTENDED_ERROR) { DWORD npErr; TCHAR szNpErr[500]; TCHAR szNpName[500]; DWORD dw = WNetGetLastError(&npErr, szNpErr, ARRAYLEN(szNpErr), szNpName, ARRAYLEN(szNpName)); if (dw == WN_SUCCESS) { wsprintf(sz, TEXT("WN_EXTENDED_ERROR: %d, %s (%s)"), npErr, szNpErr, szNpName); } else { wsprintf(sz, TEXT("WN_EXTENDED_ERROR: WNetGetLastError error %d"), dw); } SetDlgItemText(hwnd, IDC_ERROR, sz); } else { wsprintf(sz, TEXT("%d (0x%08lx) "), dwErr, dwErr); TCHAR szBuffer[MAX_PATH]; DWORD dwBufferSize = ARRAYLEN(szBuffer); DWORD dwReturn = FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwErr, LANG_SYSTEM_DEFAULT, szBuffer, dwBufferSize, NULL); if (0 == dwReturn) { // couldn't find message _tcscat(sz, TEXT("unknown error")); } else { _tcscat(sz, szBuffer); } SetDlgItemText(hwnd, IDC_ERROR, sz); } if (dwErr != WN_SUCCESS && dwErr != 0xffffffff) { Beep(1000, 150); } } INT_PTR CALLBACK Connection1DlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { static int options[] = { IDC_RO_PATH, IDC_USE_MRU, IDC_HIDE_BOX, IDC_PERSIST, IDC_NOT_PERSIST, IDC_CONN_POINT, IDC_YESPATH, IDC_NOPATH, IDC_DISK, IDC_PRINTER }; switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_REMOTE_TEXT, TEXT("\\\\scratch\\scratch")); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_DEVICE, TEXT("")); CheckRadioButton(hwnd, IDC_YESPATH, IDC_NOPATH, IDC_YESPATH); CheckRadioButton(hwnd, IDC_DISK, IDC_PRINTER, IDC_DISK); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { LPCONNECTDLGSTRUCT lpConnDlgStruct; CONNECTDLGSTRUCT conn; if (1 == IsDlgButtonChecked(hwnd, IDC_NULL)) { lpConnDlgStruct = NULL; } else { // get the flags DWORD dwFlags = 0; if (1 == IsDlgButtonChecked(hwnd, IDC_RO_PATH)) { dwFlags |= CONNDLG_RO_PATH; } if (1 == IsDlgButtonChecked(hwnd, IDC_USE_MRU)) { dwFlags |= CONNDLG_USE_MRU; } if (1 == IsDlgButtonChecked(hwnd, IDC_HIDE_BOX)) { dwFlags |= CONNDLG_HIDE_BOX; } if (1 == IsDlgButtonChecked(hwnd, IDC_PERSIST)) { dwFlags |= CONNDLG_PERSIST; } if (1 == IsDlgButtonChecked(hwnd, IDC_NOT_PERSIST)) { dwFlags |= CONNDLG_NOT_PERSIST; } if (1 == IsDlgButtonChecked(hwnd, IDC_CONN_POINT)) { dwFlags |= CONNDLG_CONN_POINT; } TCHAR szRemoteName[200]; LPTSTR pszRemoteName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_YESPATH)) { GetDlgItemText(hwnd, IDC_REMOTE_TEXT, szRemoteName, ARRAYLEN(szRemoteName)); pszRemoteName = szRemoteName; } else { pszRemoteName = NULL; } DWORD dwType = 0; if (1 == IsDlgButtonChecked(hwnd, IDC_DISK)) { dwType = RESOURCETYPE_DISK; } else if (1 == IsDlgButtonChecked(hwnd, IDC_PRINTER)) { dwType = RESOURCETYPE_PRINT; } else { // internal error } NETRESOURCE net; conn.cbStructure = sizeof(conn); conn.hwndOwner = hwnd; conn.lpConnRes = &net; conn.dwFlags = dwFlags; conn.dwDevNum = 999; // initialize to something recognizable net.dwScope = 0; net.dwType = dwType; net.dwDisplayType = 0; net.dwUsage = 0; net.lpLocalName = NULL; net.lpRemoteName = pszRemoteName; net.lpComment = NULL; net.lpProvider = NULL; lpConnDlgStruct = &conn; } // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_DEVICE, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = WNetConnectionDialog1(lpConnDlgStruct); SetCursor(hOldCursor); TCHAR sz[500]; sz[0] = L'\0'; if (NULL != lpConnDlgStruct) { wsprintf(sz, TEXT("%d"), lpConnDlgStruct->dwDevNum); } SetDlgItemText(hwnd, IDC_DEVICE, sz); DoError(hwnd, dw); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; case IDC_NULL: { BOOL bOn = (BST_UNCHECKED == IsDlgButtonChecked(hwnd, IDC_NULL)); for (int i = 0; i < ARRAYLEN(options); i++) { EnableWindow(GetDlgItem(hwnd, options[i]), bOn); } return TRUE; } } return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK Disconnect1DlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { static int options[] = { IDC_UPDATE_PROFILE, IDC_NO_FORCE, IDC_LOCAL, IDC_REMOTE }; switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_LOCAL_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_LOCAL_TEXT), FALSE); CheckDlgButton(hwnd, IDC_LOCAL_TEXT, 0); SetDlgItemText(hwnd, IDC_REMOTE_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_REMOTE_TEXT), FALSE); CheckDlgButton(hwnd, IDC_REMOTE_TEXT, 0); CheckDlgButton(hwnd, IDC_UPDATE_PROFILE, 0); CheckDlgButton(hwnd, IDC_NO_FORCE, 0); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { LPDISCDLGSTRUCT lpDiscDlgStruct; DISCDLGSTRUCT disc; if (1 == IsDlgButtonChecked(hwnd, IDC_NULL)) { lpDiscDlgStruct = NULL; } else { // get the flags DWORD dwFlags = 0; if (1 == IsDlgButtonChecked(hwnd, IDC_UPDATE_PROFILE)) { dwFlags |= DISC_UPDATE_PROFILE; } if (1 == IsDlgButtonChecked(hwnd, IDC_NO_FORCE)) { dwFlags |= DISC_NO_FORCE; } TCHAR szLocalName[200]; LPTSTR pszLocalName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_LOCAL)) { GetDlgItemText(hwnd, IDC_LOCAL_TEXT, szLocalName, ARRAYLEN(szLocalName)); pszLocalName = szLocalName; } TCHAR szRemoteName[200]; LPTSTR pszRemoteName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_REMOTE)) { GetDlgItemText(hwnd, IDC_REMOTE_TEXT, szRemoteName, ARRAYLEN(szRemoteName)); pszRemoteName = szRemoteName; } disc.cbStructure = sizeof(disc); disc.hwndOwner = hwnd; disc.lpLocalName = pszLocalName; disc.lpRemoteName = pszRemoteName; disc.dwFlags = dwFlags; lpDiscDlgStruct = &disc; } // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = WNetDisconnectDialog1(lpDiscDlgStruct); SetCursor(hOldCursor); DoError(hwnd, dw); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; case IDC_LOCAL: EnableWindow(GetDlgItem(hwnd, IDC_LOCAL_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_LOCAL))); break; case IDC_REMOTE: EnableWindow(GetDlgItem(hwnd, IDC_REMOTE_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_REMOTE))); break; case IDC_NULL: { BOOL bOn = (BST_UNCHECKED == IsDlgButtonChecked(hwnd, IDC_NULL)); for (int i = 0; i < ARRAYLEN(options); i++) { EnableWindow(GetDlgItem(hwnd, options[i]), bOn); } // special handling of text fields: EnableWindow(GetDlgItem(hwnd, IDC_LOCAL_TEXT), bOn && (1 == IsDlgButtonChecked(hwnd, IDC_LOCAL))); EnableWindow(GetDlgItem(hwnd, IDC_REMOTE_TEXT), bOn && (1 == IsDlgButtonChecked(hwnd, IDC_REMOTE))); return TRUE; } } return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK ConnectionDlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); CheckRadioButton(hwnd, IDC_DISK, IDC_PRINTER, IDC_DISK); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { DWORD dwType = 0; if (1 == IsDlgButtonChecked(hwnd, IDC_DISK)) { dwType = RESOURCETYPE_DISK; } else if (1 == IsDlgButtonChecked(hwnd, IDC_PRINTER)) { dwType = RESOURCETYPE_PRINT; } else { // internal error } // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = WNetConnectionDialog(hwnd, dwType); SetCursor(hOldCursor); DoError(hwnd, dw); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; } return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK DisconnectDlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); CheckRadioButton(hwnd, IDC_DISK, IDC_PRINTER, IDC_DISK); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { DWORD dwType = 0; if (1 == IsDlgButtonChecked(hwnd, IDC_DISK)) { dwType = RESOURCETYPE_DISK; } else if (1 == IsDlgButtonChecked(hwnd, IDC_PRINTER)) { dwType = RESOURCETYPE_PRINT; } else { // internal error } // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = WNetDisconnectDialog(hwnd, dwType); SetCursor(hOldCursor); DoError(hwnd, dw); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; } return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK Connection2DlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_HELPFILE, TEXT("winfile.hlp")); SetDlgItemText(hwnd, IDC_HELPINDEX, TEXT("5205")); CheckRadioButton(hwnd, IDC_DISK, IDC_PRINTER, IDC_DISK); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { DWORD dwType = 0; if (1 == IsDlgButtonChecked(hwnd, IDC_DISK)) { dwType = RESOURCETYPE_DISK; } else if (1 == IsDlgButtonChecked(hwnd, IDC_PRINTER)) { dwType = RESOURCETYPE_PRINT; } else { // internal error } WCHAR szHelpFile[200]; GetDlgItemTextW(hwnd, IDC_HELPFILE, szHelpFile, ARRAYLEN(szHelpFile)); DWORD nHelpContext = 5205; // default BOOL translated; UINT uhelp = GetDlgItemInt(hwnd, IDC_HELPINDEX, &translated, FALSE); if (translated) { nHelpContext = uhelp; } // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = LoadMpr(); if (dw == WN_SUCCESS) { if (NULL == pfnWNetConnectionDialog2) { dw = ERROR_PROC_NOT_FOUND; } else { dw = (*pfnWNetConnectionDialog2)(hwnd, dwType, szHelpFile, nHelpContext); } } SetCursor(hOldCursor); DoError(hwnd, dw); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; } return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK Disconnect2DlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_HELPFILE, TEXT("winfile.hlp")); SetDlgItemText(hwnd, IDC_HELPINDEX, TEXT("5206")); CheckRadioButton(hwnd, IDC_DISK, IDC_PRINTER, IDC_DISK); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { DWORD dwType = 0; if (1 == IsDlgButtonChecked(hwnd, IDC_DISK)) { dwType = RESOURCETYPE_DISK; } else if (1 == IsDlgButtonChecked(hwnd, IDC_PRINTER)) { dwType = RESOURCETYPE_PRINT; } else { // internal error } WCHAR szHelpFile[200]; GetDlgItemTextW(hwnd, IDC_HELPFILE, szHelpFile, ARRAYLEN(szHelpFile)); DWORD nHelpContext = 5206; // default BOOL translated; UINT uhelp = GetDlgItemInt(hwnd, IDC_HELPINDEX, &translated, FALSE); if (translated) { nHelpContext = uhelp; } // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = LoadMpr(); if (dw == WN_SUCCESS) { if (NULL == pfnWNetDisconnectDialog2) { dw = ERROR_PROC_NOT_FOUND; } else { dw = (*pfnWNetDisconnectDialog2)(hwnd, dwType, szHelpFile, nHelpContext); } } SetCursor(hOldCursor); DoError(hwnd, dw); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; } return FALSE; } default: return FALSE; // didn't process } } BOOL BrowseValidationCallback( LPWSTR pszName ) { return TRUE; } INT_PTR CALLBACK BrowseDlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_BROWSE_NAME, TEXT("")); CheckRadioButton(hwnd, IDC_DISK, IDC_PRINTER, IDC_DISK); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { DWORD dwType = 0; if (1 == IsDlgButtonChecked(hwnd, IDC_DISK)) { dwType = RESOURCETYPE_DISK; } else if (1 == IsDlgButtonChecked(hwnd, IDC_PRINTER)) { dwType = RESOURCETYPE_PRINT; } else { // internal error } // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_BROWSE_NAME, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); WCHAR szName[MAX_PATH]; DWORD dw = LoadMprUI(); if (dw == WN_SUCCESS) { if (NULL == pfnWNetBrowseDialog) { dw = ERROR_PROC_NOT_FOUND; } else { dw = (*pfnWNetBrowseDialog)( hwnd, dwType, szName, ARRAYLEN(szName), L"help.hlp", // help file 0, // help context &BrowseValidationCallback); } } SetCursor(hOldCursor); if (dw == WN_SUCCESS) { SetDlgItemTextW(hwnd, IDC_BROWSE_NAME, szName); } DoError(hwnd, dw); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; } return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK GetConnectionDlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_REMOTE, TEXT("")); SetDlgItemText(hwnd, IDC_LOCAL_TEXT, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZEIN, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZE, TEXT("")); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { TCHAR szLocalName[200]; GetDlgItemText(hwnd, IDC_LOCAL_TEXT, szLocalName, ARRAYLEN(szLocalName)); TCHAR szReturn[MAX_PATH]; DWORD bufSize = ARRAYLEN(szReturn); DWORD bufSizeIn = bufSize; // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_REMOTE, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZEIN, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZE, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = WNetGetConnection(szLocalName, szReturn, &bufSize); SetCursor(hOldCursor); if (dw == WN_SUCCESS || dw == WN_CONNECTION_CLOSED) { SetDlgItemText(hwnd, IDC_REMOTE, szReturn); } else { SetDlgItemText(hwnd, IDC_REMOTE, TEXT("")); } TCHAR sz[500]; wsprintf(sz, TEXT("%d"), bufSize); SetDlgItemText(hwnd, IDC_BUFSIZE, sz); wsprintf(sz, TEXT("%d"), bufSizeIn); SetDlgItemText(hwnd, IDC_BUFSIZEIN, sz); DoError(hwnd, dw); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; } return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK GetConnectionDlgProc2( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_REMOTE, TEXT("")); SetDlgItemText(hwnd, IDC_PROVIDER, TEXT("")); SetDlgItemText(hwnd, IDC_LOCAL_TEXT, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZE, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZEIN, TEXT("")); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { TCHAR szLocalName[200]; GetDlgItemText(hwnd, IDC_LOCAL_TEXT, szLocalName, ARRAYLEN(szLocalName)); BYTE buf[MAX_PATH*2 + sizeof(WNET_CONNECTIONINFO)]; WNET_CONNECTIONINFO* pInfo = (WNET_CONNECTIONINFO*)buf; DWORD bufSize = sizeof(buf); DWORD bufSizeIn = bufSize; // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_REMOTE, TEXT("")); SetDlgItemText(hwnd, IDC_PROVIDER, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZE, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZEIN, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = LoadMpr(); if (dw == WN_SUCCESS) { if (NULL == pfnWNetGetConnection2) { dw = ERROR_PROC_NOT_FOUND; } else { dw = (*pfnWNetGetConnection2)(szLocalName, (LPVOID)buf, &bufSize); } } SetCursor(hOldCursor); if (dw == WN_SUCCESS || dw == WN_CONNECTION_CLOSED) { SetDlgItemText(hwnd, IDC_REMOTE, pInfo->lpRemoteName); SetDlgItemText(hwnd, IDC_PROVIDER, pInfo->lpProvider); } else { SetDlgItemText(hwnd, IDC_REMOTE, TEXT("")); SetDlgItemText(hwnd, IDC_PROVIDER, TEXT("")); } TCHAR sz[500]; wsprintf(sz, TEXT("%d"), bufSize); SetDlgItemText(hwnd, IDC_BUFSIZE, sz); wsprintf(sz, TEXT("%d"), bufSizeIn); SetDlgItemText(hwnd, IDC_BUFSIZEIN, sz); DoError(hwnd, dw); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; } return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK GetConnection3DlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_LOCAL_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_LOCAL_TEXT), FALSE); CheckDlgButton(hwnd, IDC_LOCAL_TEXT, 0); SetDlgItemText(hwnd, IDC_PROVIDER_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_PROVIDER_TEXT), FALSE); CheckDlgButton(hwnd, IDC_PROVIDER_TEXT, 0); SetDlgItemInt (hwnd, IDC_INFOLEVEL, 1, FALSE); // test level 1 only SetDlgItemText(hwnd, IDC_RETURNFLAGS, TEXT("")); SetDlgItemInt (hwnd, IDC_BUFSIZEIN, sizeof(DWORD), FALSE); SetDlgItemText(hwnd, IDC_BUFSIZE, TEXT("")); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { TCHAR szLocalName[200]; LPTSTR pszLocalName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_LOCAL)) { GetDlgItemText(hwnd, IDC_LOCAL_TEXT, szLocalName, ARRAYLEN(szLocalName)); pszLocalName = szLocalName; } TCHAR szProviderName[200]; LPTSTR pszProviderName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_PROVIDER)) { GetDlgItemText(hwnd, IDC_PROVIDER_TEXT, szProviderName, ARRAYLEN(szProviderName)); pszProviderName = szProviderName; } WNGC_CONNECTION_STATE ConnState; DWORD bufSizeIn = sizeof(ConnState); DWORD bufSize = bufSizeIn; // clear it SetDlgItemText(hwnd, IDC_RETURNFLAGS, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZE, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZEIN, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = LoadMpr(); if (dw == WN_SUCCESS) { if (NULL == pfnWNetGetConnection3) { dw = ERROR_PROC_NOT_FOUND; } else { dw = (*pfnWNetGetConnection3)( pszLocalName, pszProviderName, WNGC_INFOLEVEL_DISCONNECTED, // level &ConnState, // buffer &bufSize // buffer size ); } } SetCursor(hOldCursor); DoError(hwnd, dw); if (WN_SUCCESS == dw) { TCHAR szBuf[50]; wsprintf(szBuf, TEXT("%lu (%hs)"), ConnState, (ConnState.dwState == WNGC_CONNECTED) ? "WNGC_CONNECTED" : (ConnState.dwState == WNGC_DISCONNECTED) ? "WNGC_DISCONNECTED" : "Unrecognized" ); SetDlgItemText(hwnd, IDC_RETURNFLAGS, szBuf); } SetDlgItemInt(hwnd, IDC_BUFSIZEIN, bufSizeIn, FALSE); SetDlgItemInt(hwnd, IDC_BUFSIZE , bufSize , FALSE); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; case IDC_LOCAL: EnableWindow(GetDlgItem(hwnd, IDC_LOCAL_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_LOCAL))); return TRUE; case IDC_PROVIDER: EnableWindow(GetDlgItem(hwnd, IDC_PROVIDER_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_PROVIDER))); return TRUE; } // end switch (LOWORD(wParam)) return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK GetConnectionPerformanceDlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_LOCAL_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_LOCAL_TEXT), FALSE); CheckDlgButton(hwnd, IDC_LOCAL_TEXT, 0); SetDlgItemText(hwnd, IDC_REMOTE_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_REMOTE_TEXT), FALSE); CheckDlgButton(hwnd, IDC_REMOTE_TEXT, 0); SetDlgItemText(hwnd, IDC_PROVIDER_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_PROVIDER_TEXT), FALSE); CheckDlgButton(hwnd, IDC_PROVIDER_TEXT, 0); SetDlgItemText(hwnd, IDC_RETURNFLAGS, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNSPEED, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNDELAY, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNOPTDATASIZE, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZE, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZEIN, TEXT("")); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { TCHAR szLocalName[200]; LPTSTR pszLocalName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_LOCAL)) { GetDlgItemText(hwnd, IDC_LOCAL_TEXT, szLocalName, ARRAYLEN(szLocalName)); pszLocalName = szLocalName; } TCHAR szRemoteName[200]; LPTSTR pszRemoteName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_REMOTE)) { GetDlgItemText(hwnd, IDC_REMOTE_TEXT, szRemoteName, ARRAYLEN(szRemoteName)); pszRemoteName = szRemoteName; } TCHAR szProviderName[200]; LPTSTR pszProviderName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_PROVIDER)) { GetDlgItemText(hwnd, IDC_PROVIDER_TEXT, szProviderName, ARRAYLEN(szProviderName)); pszProviderName = szProviderName; } NETRESOURCE net; net.dwScope = 0; net.dwType = 0; net.dwDisplayType = 0; net.dwUsage = 0; net.lpLocalName = pszLocalName; net.lpRemoteName = pszRemoteName; net.lpComment = NULL; net.lpProvider = pszProviderName; NETCONNECTINFOSTRUCT inf; inf.cbStructure = sizeof(inf); DWORD bufSizeIn = inf.cbStructure; // clear it SetDlgItemText(hwnd, IDC_RETURNFLAGS, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNSPEED, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNDELAY, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNOPTDATASIZE, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZE, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZEIN, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = MultinetGetConnectionPerformance( &net, &inf); SetCursor(hOldCursor); DoError(hwnd, dw); if (WN_SUCCESS == dw) { TCHAR szBuf[MAX_PATH]; wsprintf(szBuf, TEXT("%#lx"), inf.dwFlags); SetDlgItemText(hwnd, IDC_RETURNFLAGS, szBuf); SetDlgItemInt (hwnd, IDC_RETURNSPEED, inf.dwSpeed, FALSE); SetDlgItemInt (hwnd, IDC_RETURNDELAY, inf.dwDelay, FALSE); SetDlgItemInt (hwnd, IDC_RETURNOPTDATASIZE, inf.dwOptDataSize, FALSE); } SetDlgItemInt(hwnd, IDC_BUFSIZEIN, bufSizeIn, FALSE); SetDlgItemInt(hwnd, IDC_BUFSIZE, inf.cbStructure, FALSE); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; case IDC_LOCAL: EnableWindow(GetDlgItem(hwnd, IDC_LOCAL_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_LOCAL))); return TRUE; case IDC_REMOTE: EnableWindow(GetDlgItem(hwnd, IDC_REMOTE_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_REMOTE))); return TRUE; case IDC_PROVIDER: EnableWindow(GetDlgItem(hwnd, IDC_PROVIDER_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_PROVIDER))); return TRUE; } // end switch (LOWORD(wParam)) return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK FormatNetworkNameDlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_RETURN, TEXT("")); SetDlgItemText(hwnd, IDC_REMOTE_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_REMOTE_TEXT), FALSE); CheckDlgButton(hwnd, IDC_REMOTE_TEXT, 0); SetDlgItemText(hwnd, IDC_PROVIDER_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_PROVIDER_TEXT), FALSE); CheckDlgButton(hwnd, IDC_PROVIDER_TEXT, 0); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { // get the flags DWORD dwFlags = 0; if (1 == IsDlgButtonChecked(hwnd, IDC_MULTILINE)) { dwFlags |= WNFMT_MULTILINE; } if (1 == IsDlgButtonChecked(hwnd, IDC_ABBREVIATED)) { dwFlags |= WNFMT_ABBREVIATED; } if (1 == IsDlgButtonChecked(hwnd, IDC_INENUM)) { dwFlags |= WNFMT_INENUM; } TCHAR szRemoteName[200]; LPTSTR pszRemoteName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_REMOTE)) { GetDlgItemText(hwnd, IDC_REMOTE_TEXT, szRemoteName, ARRAYLEN(szRemoteName)); pszRemoteName = szRemoteName; } TCHAR szProviderName[200]; LPTSTR pszProviderName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_PROVIDER)) { GetDlgItemText(hwnd, IDC_PROVIDER_TEXT, szProviderName, ARRAYLEN(szProviderName)); pszProviderName = szProviderName; } TCHAR szBuf[1024]; szBuf[0] = TEXT('\0'); DWORD nLength = ARRAYLEN(szBuf); DWORD dwAveCharPerLine = 100000; // BUGBUG // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_RETURN, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = WNetFormatNetworkName( pszProviderName, pszRemoteName, szBuf, &nLength, dwFlags, dwAveCharPerLine); SetCursor(hOldCursor); SetDlgItemText(hwnd, IDC_RETURN, szBuf); DoError(hwnd, dw); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; case IDC_REMOTE: EnableWindow(GetDlgItem(hwnd, IDC_REMOTE_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_REMOTE))); return TRUE; case IDC_PROVIDER: EnableWindow(GetDlgItem(hwnd, IDC_PROVIDER_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_PROVIDER))); return TRUE; } // end switch (LOWORD(wParam)) return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK GetProviderTypeDlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_PROVIDERTYPE, TEXT("")); SetDlgItemText(hwnd, IDC_PROVIDER_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_PROVIDER_TEXT), FALSE); CheckDlgButton(hwnd, IDC_PROVIDER_TEXT, 0); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { TCHAR szProviderName[200]; LPTSTR pszProviderName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_PROVIDER)) { GetDlgItemText(hwnd, IDC_PROVIDER_TEXT, szProviderName, ARRAYLEN(szProviderName)); pszProviderName = szProviderName; } // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_PROVIDERTYPE, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dwNetType; DWORD dw = LoadMpr(); if (dw == WN_SUCCESS) { if (NULL == pfnWNetGetProviderType) { dw = ERROR_PROC_NOT_FOUND; } else { dw = (*pfnWNetGetProviderType)(pszProviderName, &dwNetType); } } SetCursor(hOldCursor); if (WN_SUCCESS == dw) { TCHAR sz[100]; wsprintf(sz, TEXT("0x%08x"), dwNetType); SetDlgItemText(hwnd, IDC_PROVIDERTYPE, sz); } DoError(hwnd, dw); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; case IDC_PROVIDER: EnableWindow(GetDlgItem(hwnd, IDC_PROVIDER_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_PROVIDER))); return TRUE; } // end switch (LOWORD(wParam)) return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK GetProviderNameDlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_PROVIDERNAME, TEXT("")); SetDlgItemText(hwnd, IDC_PROVIDER_TEXT, TEXT("")); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { DWORD dwNetType; TCHAR szProviderType[200]; GetDlgItemText(hwnd, IDC_PROVIDER_TEXT, szProviderType, ARRAYLEN(szProviderType)); _stscanf(szProviderType, TEXT("%lx"), &dwNetType); // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_PROVIDERNAME, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); TCHAR szProviderName[MAX_PATH]; DWORD cchProviderName = ARRAYLEN(szProviderName); DWORD dw = WNetGetProviderName(dwNetType, szProviderName, &cchProviderName); SetCursor(hOldCursor); if (WN_SUCCESS == dw) { TCHAR sz[100]; SetDlgItemText(hwnd, IDC_PROVIDERNAME, szProviderName); } DoError(hwnd, dw); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; } // end switch (LOWORD(wParam)) return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK GetNetworkInformationDlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_PROVIDERVERSION, TEXT("")); SetDlgItemText(hwnd, IDC_STATUS, TEXT("")); SetDlgItemText(hwnd, IDC_CHARACTERISTICS, TEXT("")); SetDlgItemText(hwnd, IDC_HANDLE, TEXT("")); SetDlgItemText(hwnd, IDC_NETTYPE, TEXT("")); SetDlgItemText(hwnd, IDC_PRINTERS, TEXT("")); SetDlgItemText(hwnd, IDC_DRIVES, TEXT("")); SetDlgItemText(hwnd, IDC_PROVIDER_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_PROVIDER_TEXT), FALSE); CheckDlgButton(hwnd, IDC_PROVIDER_TEXT, 0); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { TCHAR szProviderName[200]; LPTSTR pszProviderName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_PROVIDER)) { GetDlgItemText(hwnd, IDC_PROVIDER_TEXT, szProviderName, ARRAYLEN(szProviderName)); pszProviderName = szProviderName; } NETINFOSTRUCT ni; ni.cbStructure = sizeof(NETINFOSTRUCT); // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_PROVIDERVERSION, TEXT("")); SetDlgItemText(hwnd, IDC_STATUS, TEXT("")); SetDlgItemText(hwnd, IDC_CHARACTERISTICS, TEXT("")); SetDlgItemText(hwnd, IDC_HANDLE, TEXT("")); SetDlgItemText(hwnd, IDC_NETTYPE, TEXT("")); SetDlgItemText(hwnd, IDC_PRINTERS, TEXT("")); SetDlgItemText(hwnd, IDC_DRIVES, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = WNetGetNetworkInformation(pszProviderName, &ni); SetCursor(hOldCursor); if (WN_SUCCESS == dw) { TCHAR sz[100]; wsprintf(sz, TEXT("0x%08lx"), ni.dwProviderVersion); SetDlgItemText(hwnd, IDC_PROVIDERVERSION, sz); wsprintf(sz, TEXT("0x%08lx"), ni.dwStatus); SetDlgItemText(hwnd, IDC_STATUS, sz); wsprintf(sz, TEXT("0x%08lx"), ni.dwCharacteristics); SetDlgItemText(hwnd, IDC_CHARACTERISTICS, sz); wsprintf(sz, TEXT("0x%08lx"), ni.dwHandle); SetDlgItemText(hwnd, IDC_HANDLE, sz); wsprintf(sz, TEXT("0x%04x"), ni.wNetType); SetDlgItemText(hwnd, IDC_NETTYPE, sz); wsprintf(sz, TEXT("0x%08lx"), ni.dwPrinters); SetDlgItemText(hwnd, IDC_PRINTERS, sz); wsprintf(sz, TEXT("0x%08lx"), ni.dwDrives); SetDlgItemText(hwnd, IDC_DRIVES, sz); } DoError(hwnd, dw); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; case IDC_PROVIDER: EnableWindow(GetDlgItem(hwnd, IDC_PROVIDER_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_PROVIDER))); return TRUE; } // end switch (LOWORD(wParam)) return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK CancelConnectionDlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_LOCAL_TEXT, TEXT("")); CheckRadioButton(hwnd, IDC_FORCE, IDC_NOFORCE, IDC_NOFORCE); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { BOOL fForce = FALSE; if (1 == IsDlgButtonChecked(hwnd, IDC_FORCE)) { fForce = TRUE; } else if (1 == IsDlgButtonChecked(hwnd, IDC_NOFORCE)) { fForce = FALSE; } else { // internal error } TCHAR szLocalName[200]; GetDlgItemText(hwnd, IDC_LOCAL_TEXT, szLocalName, ARRAYLEN(szLocalName)); // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = WNetCancelConnection(szLocalName, fForce); SetCursor(hOldCursor); DoError(hwnd, dw); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; } return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK CancelConnection2DlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_LOCAL_TEXT, TEXT("")); CheckRadioButton(hwnd, IDC_FORCE, IDC_NOFORCE, IDC_NOFORCE); CheckDlgButton(hwnd, IDC_UPDATE_PROFILE, 0); CheckDlgButton(hwnd, IDC_REFCOUNT, 0); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { // get the flags DWORD dwFlags = 0; if (1 == IsDlgButtonChecked(hwnd, IDC_UPDATE_PROFILE)) { dwFlags |= CONNECT_UPDATE_PROFILE; } if (1 == IsDlgButtonChecked(hwnd, IDC_REFCOUNT)) { dwFlags |= CONNECT_REFCOUNT; } BOOL fForce = FALSE; if (1 == IsDlgButtonChecked(hwnd, IDC_FORCE)) { fForce = TRUE; } else if (1 == IsDlgButtonChecked(hwnd, IDC_NOFORCE)) { fForce = FALSE; } else { // internal error } TCHAR szLocalName[200]; GetDlgItemText(hwnd, IDC_LOCAL_TEXT, szLocalName, ARRAYLEN(szLocalName)); // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = WNetCancelConnection2(szLocalName, dwFlags, fForce); SetCursor(hOldCursor); DoError(hwnd, dw); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; } return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK AddConnectionDlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_LOCAL_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_LOCAL_TEXT), FALSE); CheckDlgButton(hwnd, IDC_LOCAL_TEXT, 0); SetDlgItemText(hwnd, IDC_REMOTE_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_REMOTE_TEXT), FALSE); CheckDlgButton(hwnd, IDC_REMOTE_TEXT, 0); SetDlgItemText(hwnd, IDC_PASSWORD_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_PASSWORD_TEXT), FALSE); CheckDlgButton(hwnd, IDC_PASSWORD_TEXT, 0); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { TCHAR szLocalName[200]; LPTSTR pszLocalName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_LOCAL)) { GetDlgItemText(hwnd, IDC_LOCAL_TEXT, szLocalName, ARRAYLEN(szLocalName)); pszLocalName = szLocalName; } TCHAR szRemoteName[200]; LPTSTR pszRemoteName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_REMOTE)) { GetDlgItemText(hwnd, IDC_REMOTE_TEXT, szRemoteName, ARRAYLEN(szRemoteName)); pszRemoteName = szRemoteName; } TCHAR szPassword[200]; LPTSTR pszPassword = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_PASSWORD)) { GetDlgItemText(hwnd, IDC_PASSWORD_TEXT, szPassword, ARRAYLEN(szPassword)); pszPassword = szPassword; } // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = WNetAddConnection( pszRemoteName, pszPassword, pszLocalName); SetCursor(hOldCursor); DoError(hwnd, dw); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; case IDC_LOCAL: EnableWindow(GetDlgItem(hwnd, IDC_LOCAL_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_LOCAL))); return TRUE; case IDC_REMOTE: EnableWindow(GetDlgItem(hwnd, IDC_REMOTE_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_REMOTE))); return TRUE; case IDC_PASSWORD: EnableWindow(GetDlgItem(hwnd, IDC_PASSWORD_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_PASSWORD))); return TRUE; } // end switch (LOWORD(wParam)) return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK AddConnection2DlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_LOCAL_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_LOCAL_TEXT), FALSE); CheckDlgButton(hwnd, IDC_LOCAL_TEXT, 0); SetDlgItemText(hwnd, IDC_REMOTE_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_REMOTE_TEXT), FALSE); CheckDlgButton(hwnd, IDC_REMOTE_TEXT, 0); SetDlgItemText(hwnd, IDC_PROVIDER_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_PROVIDER_TEXT), FALSE); CheckDlgButton(hwnd, IDC_PROVIDER_TEXT, 0); SetDlgItemText(hwnd, IDC_PASSWORD_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_PASSWORD_TEXT), FALSE); CheckDlgButton(hwnd, IDC_PASSWORD_TEXT, 0); SetDlgItemText(hwnd, IDC_USER_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_USER_TEXT), FALSE); CheckDlgButton(hwnd, IDC_USER_TEXT, 0); CheckRadioButton(hwnd, IDC_DISK, IDC_PRINTER, IDC_DISK); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { // get the flags DWORD dwFlags = 0; if (1 == IsDlgButtonChecked(hwnd, IDC_CONNECT_UPDATE_PROFILE)) { dwFlags |= CONNECT_UPDATE_PROFILE; } DWORD dwType = 0; if (1 == IsDlgButtonChecked(hwnd, IDC_DISK)) { dwType = RESOURCETYPE_DISK; } else if (1 == IsDlgButtonChecked(hwnd, IDC_PRINTER)) { dwType = RESOURCETYPE_PRINT; } else { // internal error } TCHAR szLocalName[200]; LPTSTR pszLocalName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_LOCAL)) { GetDlgItemText(hwnd, IDC_LOCAL_TEXT, szLocalName, ARRAYLEN(szLocalName)); pszLocalName = szLocalName; } TCHAR szRemoteName[200]; LPTSTR pszRemoteName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_REMOTE)) { GetDlgItemText(hwnd, IDC_REMOTE_TEXT, szRemoteName, ARRAYLEN(szRemoteName)); pszRemoteName = szRemoteName; } TCHAR szProviderName[200]; LPTSTR pszProviderName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_PROVIDER)) { GetDlgItemText(hwnd, IDC_PROVIDER_TEXT, szProviderName, ARRAYLEN(szProviderName)); pszProviderName = szProviderName; } TCHAR szPassword[200]; LPTSTR pszPassword = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_PASSWORD)) { GetDlgItemText(hwnd, IDC_PASSWORD_TEXT, szPassword, ARRAYLEN(szPassword)); pszPassword = szPassword; } TCHAR szUserName[200]; LPTSTR pszUserName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_USER)) { GetDlgItemText(hwnd, IDC_USER_TEXT, szUserName, ARRAYLEN(szUserName)); pszUserName = szUserName; } NETRESOURCE net; net.dwScope = 0; net.dwType = dwType; net.dwDisplayType = 0; net.dwUsage = 0; net.lpLocalName = pszLocalName; net.lpRemoteName = pszRemoteName; net.lpComment = NULL; net.lpProvider = pszProviderName; // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = WNetAddConnection2( &net, pszPassword, pszUserName, dwFlags); SetCursor(hOldCursor); DoError(hwnd, dw); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; case IDC_LOCAL: EnableWindow(GetDlgItem(hwnd, IDC_LOCAL_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_LOCAL))); return TRUE; case IDC_REMOTE: EnableWindow(GetDlgItem(hwnd, IDC_REMOTE_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_REMOTE))); return TRUE; case IDC_PROVIDER: EnableWindow(GetDlgItem(hwnd, IDC_PROVIDER_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_PROVIDER))); return TRUE; case IDC_PASSWORD: EnableWindow(GetDlgItem(hwnd, IDC_PASSWORD_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_PASSWORD))); return TRUE; case IDC_USER: EnableWindow(GetDlgItem(hwnd, IDC_USER_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_USER))); return TRUE; } // end switch (LOWORD(wParam)) return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK AddConnection3DlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_LOCAL_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_LOCAL_TEXT), FALSE); CheckDlgButton(hwnd, IDC_LOCAL_TEXT, 0); SetDlgItemText(hwnd, IDC_REMOTE_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_REMOTE_TEXT), FALSE); CheckDlgButton(hwnd, IDC_REMOTE_TEXT, 0); SetDlgItemText(hwnd, IDC_PROVIDER_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_PROVIDER_TEXT), FALSE); CheckDlgButton(hwnd, IDC_PROVIDER_TEXT, 0); SetDlgItemText(hwnd, IDC_PASSWORD_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_PASSWORD_TEXT), FALSE); CheckDlgButton(hwnd, IDC_PASSWORD_TEXT, 0); SetDlgItemText(hwnd, IDC_USER_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_USER_TEXT), FALSE); CheckDlgButton(hwnd, IDC_USER_TEXT, 0); CheckRadioButton(hwnd, IDC_HWND_VALID, IDC_HWND_NO, IDC_HWND_VALID); CheckRadioButton(hwnd, IDC_DISK, IDC_PRINTER, IDC_DISK); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { // get the flags DWORD dwFlags = 0; if (1 == IsDlgButtonChecked(hwnd, IDC_CONNECT_TEMPORARY)) { dwFlags |= CONNECT_TEMPORARY; } if (1 == IsDlgButtonChecked(hwnd, IDC_CONNECT_INTERACTIVE)) { dwFlags |= CONNECT_INTERACTIVE; } if (1 == IsDlgButtonChecked(hwnd, IDC_CONNECT_PROMPT)) { dwFlags |= CONNECT_PROMPT; } if (1 == IsDlgButtonChecked(hwnd, IDC_CONNECT_UPDATE_PROFILE)) { dwFlags |= CONNECT_UPDATE_PROFILE; } if (1 == IsDlgButtonChecked(hwnd, IDC_CONNECT_UPDATE_RECENT)) { dwFlags |= CONNECT_UPDATE_RECENT; } HWND hwndParent = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_HWND_VALID)) { hwndParent = hwnd; } DWORD dwType = 0; if (1 == IsDlgButtonChecked(hwnd, IDC_DISK)) { dwType = RESOURCETYPE_DISK; } else if (1 == IsDlgButtonChecked(hwnd, IDC_PRINTER)) { dwType = RESOURCETYPE_PRINT; } else { // internal error } TCHAR szLocalName[200]; LPTSTR pszLocalName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_LOCAL)) { GetDlgItemText(hwnd, IDC_LOCAL_TEXT, szLocalName, ARRAYLEN(szLocalName)); pszLocalName = szLocalName; } TCHAR szRemoteName[200]; LPTSTR pszRemoteName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_REMOTE)) { GetDlgItemText(hwnd, IDC_REMOTE_TEXT, szRemoteName, ARRAYLEN(szRemoteName)); pszRemoteName = szRemoteName; } TCHAR szProviderName[200]; LPTSTR pszProviderName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_PROVIDER)) { GetDlgItemText(hwnd, IDC_PROVIDER_TEXT, szProviderName, ARRAYLEN(szProviderName)); pszProviderName = szProviderName; } TCHAR szPassword[200]; LPTSTR pszPassword = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_PASSWORD)) { GetDlgItemText(hwnd, IDC_PASSWORD_TEXT, szPassword, ARRAYLEN(szPassword)); pszPassword = szPassword; } TCHAR szUserName[200]; LPTSTR pszUserName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_USER)) { GetDlgItemText(hwnd, IDC_USER_TEXT, szUserName, ARRAYLEN(szUserName)); pszUserName = szUserName; } NETRESOURCE net; net.dwScope = 0; net.dwType = dwType; net.dwDisplayType = 0; net.dwUsage = 0; net.lpLocalName = pszLocalName; net.lpRemoteName = pszRemoteName; net.lpComment = NULL; net.lpProvider = pszProviderName; // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = WNetAddConnection3( hwndParent, &net, pszPassword, pszUserName, dwFlags); SetCursor(hOldCursor); DoError(hwnd, dw); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; case IDC_LOCAL: EnableWindow(GetDlgItem(hwnd, IDC_LOCAL_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_LOCAL))); return TRUE; case IDC_REMOTE: EnableWindow(GetDlgItem(hwnd, IDC_REMOTE_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_REMOTE))); return TRUE; case IDC_PROVIDER: EnableWindow(GetDlgItem(hwnd, IDC_PROVIDER_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_PROVIDER))); return TRUE; case IDC_PASSWORD: EnableWindow(GetDlgItem(hwnd, IDC_PASSWORD_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_PASSWORD))); return TRUE; case IDC_USER: EnableWindow(GetDlgItem(hwnd, IDC_USER_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_USER))); return TRUE; } // end switch (LOWORD(wParam)) return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK UseConnectionDlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZE, TEXT("")); SetDlgItemText(hwnd, IDC_ACCESSNAME, TEXT("")); SetDlgItemText(hwnd, IDC_RESULT, TEXT("")); SetDlgItemText(hwnd, IDC_LOCAL_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_LOCAL_TEXT), FALSE); CheckDlgButton(hwnd, IDC_LOCAL_TEXT, 0); SetDlgItemText(hwnd, IDC_REMOTE_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_REMOTE_TEXT), FALSE); CheckDlgButton(hwnd, IDC_REMOTE_TEXT, 0); SetDlgItemText(hwnd, IDC_PROVIDER_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_PROVIDER_TEXT), FALSE); CheckDlgButton(hwnd, IDC_PROVIDER_TEXT, 0); SetDlgItemText(hwnd, IDC_PASSWORD_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_PASSWORD_TEXT), FALSE); CheckDlgButton(hwnd, IDC_PASSWORD_TEXT, 0); SetDlgItemText(hwnd, IDC_USER_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_USER_TEXT), FALSE); CheckDlgButton(hwnd, IDC_USER_TEXT, 0); CheckRadioButton(hwnd, IDC_HWND_VALID, IDC_HWND_NO, IDC_HWND_VALID); CheckRadioButton(hwnd, IDC_DISK, IDC_PRINTER, IDC_DISK); CheckRadioButton(hwnd, IDC_ACCESS_YES, IDC_ACCESS_NO, IDC_ACCESS_YES); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { // get the flags DWORD dwFlags = 0; if (1 == IsDlgButtonChecked(hwnd, IDC_CONNECT_TEMPORARY)) { dwFlags |= CONNECT_TEMPORARY; } if (1 == IsDlgButtonChecked(hwnd, IDC_CONNECT_INTERACTIVE)) { dwFlags |= CONNECT_INTERACTIVE; } if (1 == IsDlgButtonChecked(hwnd, IDC_CONNECT_PROMPT)) { dwFlags |= CONNECT_PROMPT; } if (1 == IsDlgButtonChecked(hwnd, IDC_CONNECT_UPDATE_PROFILE)) { dwFlags |= CONNECT_UPDATE_PROFILE; } if (1 == IsDlgButtonChecked(hwnd, IDC_CONNECT_UPDATE_RECENT)) { dwFlags |= CONNECT_UPDATE_RECENT; } if (1 == IsDlgButtonChecked(hwnd, IDC_CONNECT_REDIRECT)) { dwFlags |= CONNECT_REDIRECT; } if (1 == IsDlgButtonChecked(hwnd, IDC_CONNECT_CURRENT_MEDIA)) { dwFlags |= CONNECT_CURRENT_MEDIA; } HWND hwndParent = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_HWND_VALID)) { hwndParent = hwnd; } DWORD dwType = 0; if (1 == IsDlgButtonChecked(hwnd, IDC_DISK)) { dwType = RESOURCETYPE_DISK; } else if (1 == IsDlgButtonChecked(hwnd, IDC_PRINTER)) { dwType = RESOURCETYPE_PRINT; } else { // internal error } DWORD dwBufferSize = 0; TCHAR szAccessName[MAX_PATH]; szAccessName[0] = TEXT('\0'); LPTSTR pszAccessName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_ACCESS_YES)) { pszAccessName = szAccessName; dwBufferSize = ARRAYLEN(szAccessName); } TCHAR szLocalName[200]; LPTSTR pszLocalName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_LOCAL)) { GetDlgItemText(hwnd, IDC_LOCAL_TEXT, szLocalName, ARRAYLEN(szLocalName)); pszLocalName = szLocalName; } TCHAR szRemoteName[200]; LPTSTR pszRemoteName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_REMOTE)) { GetDlgItemText(hwnd, IDC_REMOTE_TEXT, szRemoteName, ARRAYLEN(szRemoteName)); pszRemoteName = szRemoteName; } TCHAR szProviderName[200]; LPTSTR pszProviderName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_PROVIDER)) { GetDlgItemText(hwnd, IDC_PROVIDER_TEXT, szProviderName, ARRAYLEN(szProviderName)); pszProviderName = szProviderName; } TCHAR szPassword[200]; LPTSTR pszPassword = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_PASSWORD)) { GetDlgItemText(hwnd, IDC_PASSWORD_TEXT, szPassword, ARRAYLEN(szPassword)); pszPassword = szPassword; } TCHAR szUserName[200]; LPTSTR pszUserName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_USER)) { GetDlgItemText(hwnd, IDC_USER_TEXT, szUserName, ARRAYLEN(szUserName)); pszUserName = szUserName; } NETRESOURCE net; net.dwScope = 0; net.dwType = dwType; net.dwDisplayType = 0; net.dwUsage = 0; net.lpLocalName = pszLocalName; net.lpRemoteName = pszRemoteName; net.lpComment = NULL; net.lpProvider = pszProviderName; DWORD dwResult = 0; // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZE, TEXT("")); SetDlgItemText(hwnd, IDC_ACCESSNAME, TEXT("")); SetDlgItemText(hwnd, IDC_RESULT, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = WNetUseConnection( hwndParent, &net, pszUserName, pszPassword, dwFlags, pszAccessName, &dwBufferSize, &dwResult); SetCursor(hOldCursor); TCHAR sz[500]; wsprintf(sz, TEXT("%d"), dwBufferSize); SetDlgItemText(hwnd, IDC_BUFSIZE, sz); if (NULL == pszAccessName) { SetDlgItemText(hwnd, IDC_ACCESSNAME, TEXT("(null)")); } else { SetDlgItemText(hwnd, IDC_ACCESSNAME, pszAccessName); } wsprintf(sz, TEXT("%d (0x%08lx)"), dwResult, dwResult); if (dwResult & CONNECT_REFCOUNT) { _tcscat(sz, TEXT(" CONNECT_REFCOUNT")); dwResult &= ~CONNECT_REFCOUNT; } if (dwResult & CONNECT_LOCALDRIVE) { _tcscat(sz, TEXT(" CONNECT_LOCALDRIVE")); dwResult &= ~CONNECT_LOCALDRIVE; } if (dwResult != 0) { _tcscat(sz, TEXT(" + unknown")); } SetDlgItemText(hwnd, IDC_RESULT, sz); DoError(hwnd, dw); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; case IDC_LOCAL: EnableWindow(GetDlgItem(hwnd, IDC_LOCAL_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_LOCAL))); return TRUE; case IDC_REMOTE: EnableWindow(GetDlgItem(hwnd, IDC_REMOTE_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_REMOTE))); return TRUE; case IDC_PROVIDER: EnableWindow(GetDlgItem(hwnd, IDC_PROVIDER_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_PROVIDER))); return TRUE; case IDC_PASSWORD: EnableWindow(GetDlgItem(hwnd, IDC_PASSWORD_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_PASSWORD))); return TRUE; case IDC_USER: EnableWindow(GetDlgItem(hwnd, IDC_USER_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_USER))); return TRUE; } // end switch (LOWORD(wParam)) return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK GetResourceInformationDlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_REMOTE_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_REMOTE_TEXT), FALSE); CheckDlgButton(hwnd, IDC_REMOTE_TEXT, 0); SetDlgItemText(hwnd, IDC_PROVIDER_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_PROVIDER_TEXT), FALSE); CheckDlgButton(hwnd, IDC_PROVIDER_TEXT, 0); CheckRadioButton(hwnd, IDC_DISK, IDC_ANY, IDC_DISK); SetDlgItemText(hwnd, IDC_RETURNREMOTE, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNPROVIDER, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNSCOPE, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNTYPE, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNUSAGE, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNSYSTEM, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNDISPLAYTYPE, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNLOCALNAME, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNCOMMENT, TEXT("")); SetDlgItemInt (hwnd, IDC_BUFSIZEIN, sizeof(NETRESOURCE) + MAX_PATH*2, FALSE); SetDlgItemText(hwnd, IDC_BUFSIZE, TEXT("")); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { DWORD dwType = 0; if (1 == IsDlgButtonChecked(hwnd, IDC_DISK)) { dwType = RESOURCETYPE_DISK; } else if (1 == IsDlgButtonChecked(hwnd, IDC_PRINTER)) { dwType = RESOURCETYPE_PRINT; } else if (1 == IsDlgButtonChecked(hwnd, IDC_ANY)) { dwType = RESOURCETYPE_ANY; } else { // internal error } TCHAR szRemoteName[200]; LPTSTR pszRemoteName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_REMOTE)) { GetDlgItemText(hwnd, IDC_REMOTE_TEXT, szRemoteName, ARRAYLEN(szRemoteName)); pszRemoteName = szRemoteName; } TCHAR szProviderName[200]; LPTSTR pszProviderName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_PROVIDER)) { GetDlgItemText(hwnd, IDC_PROVIDER_TEXT, szProviderName, ARRAYLEN(szProviderName)); pszProviderName = szProviderName; } NETRESOURCE net; net.dwScope = 0; net.dwType = dwType; net.dwDisplayType = 0; net.dwUsage = 0; net.lpLocalName = NULL; net.lpRemoteName = pszRemoteName; net.lpComment = NULL; net.lpProvider = pszProviderName; DWORD bufSizeIn = GetDlgItemInt(hwnd, IDC_BUFSIZEIN, NULL, FALSE); DWORD bufSize = bufSizeIn; LPTSTR lpSystem = NULL; // clear it SetDlgItemText(hwnd, IDC_RETURNREMOTE, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNPROVIDER, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNSCOPE, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNTYPE, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNUSAGE, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNSYSTEM, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNDISPLAYTYPE, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNLOCALNAME, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNCOMMENT, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZE, TEXT("")); SetDlgItemInt (hwnd, IDC_BUFSIZEIN, bufSizeIn, FALSE); HLOCAL buf = LocalAlloc(0, bufSizeIn); if (buf == NULL) { SetDlgItemText(hwnd, IDC_ERROR, TEXT("The test couldn't allocate a heap buffer of that size.")); Beep(1000, 150); return TRUE; } LPNETRESOURCE pnrOut = (LPNETRESOURCE)buf; HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = WNetGetResourceInformation( &net, (LPVOID)buf, &bufSize, &lpSystem); SetCursor(hOldCursor); DoError(hwnd, dw); TCHAR szBuf[MAX_PATH]; if (WN_SUCCESS == dw) { SetDlgItemText(hwnd, IDC_RETURNREMOTE, (NULL == pnrOut->lpRemoteName) ? TEXT("") : pnrOut->lpRemoteName); SetDlgItemText(hwnd, IDC_RETURNPROVIDER, (NULL == pnrOut->lpProvider) ? TEXT("") : pnrOut->lpProvider); GetScopeString(szBuf, pnrOut); SetDlgItemText(hwnd, IDC_RETURNSCOPE, szBuf); GetTypeString(szBuf, pnrOut); SetDlgItemText(hwnd, IDC_RETURNTYPE, szBuf); GetUsageString(szBuf, pnrOut); SetDlgItemText(hwnd, IDC_RETURNUSAGE, szBuf); SetDlgItemText(hwnd, IDC_RETURNSYSTEM, (NULL == lpSystem) ? TEXT("") : lpSystem); GetDisplayTypeString(szBuf, pnrOut); SetDlgItemText(hwnd, IDC_RETURNDISPLAYTYPE, szBuf); SetDlgItemText(hwnd, IDC_RETURNLOCALNAME, (NULL == pnrOut->lpLocalName) ? TEXT("") : pnrOut->lpLocalName); SetDlgItemText(hwnd, IDC_RETURNCOMMENT, (NULL == pnrOut->lpComment) ? TEXT("") : pnrOut->lpComment); } wsprintf(szBuf, TEXT("%d"), bufSize); SetDlgItemText(hwnd, IDC_BUFSIZE, szBuf); LocalFree(buf); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; case IDC_REMOTE: EnableWindow(GetDlgItem(hwnd, IDC_REMOTE_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_REMOTE))); return TRUE; case IDC_PROVIDER: EnableWindow(GetDlgItem(hwnd, IDC_PROVIDER_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_PROVIDER))); return TRUE; } // end switch (LOWORD(wParam)) return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK GetResourceParentDlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_REMOTE_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_REMOTE_TEXT), FALSE); CheckDlgButton(hwnd, IDC_REMOTE_TEXT, 0); SetDlgItemText(hwnd, IDC_PROVIDER_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_PROVIDER_TEXT), FALSE); CheckDlgButton(hwnd, IDC_PROVIDER_TEXT, 0); CheckRadioButton(hwnd, IDC_DISK, IDC_ANY, IDC_DISK); SetDlgItemText(hwnd, IDC_RETURNREMOTE, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNPROVIDER, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNTYPE, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNUSAGE, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNSCOPE, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNDISPLAYTYPE, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNLOCALNAME, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNCOMMENT, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZE, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZEIN, TEXT("")); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { DWORD dwType = 0; if (1 == IsDlgButtonChecked(hwnd, IDC_DISK)) { dwType = RESOURCETYPE_DISK; } else if (1 == IsDlgButtonChecked(hwnd, IDC_PRINTER)) { dwType = RESOURCETYPE_PRINT; } else if (1 == IsDlgButtonChecked(hwnd, IDC_ANY)) { dwType = RESOURCETYPE_ANY; } else { // internal error } TCHAR szRemoteName[200]; LPTSTR pszRemoteName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_REMOTE)) { GetDlgItemText(hwnd, IDC_REMOTE_TEXT, szRemoteName, ARRAYLEN(szRemoteName)); pszRemoteName = szRemoteName; } TCHAR szProviderName[200]; LPTSTR pszProviderName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_PROVIDER)) { GetDlgItemText(hwnd, IDC_PROVIDER_TEXT, szProviderName, ARRAYLEN(szProviderName)); pszProviderName = szProviderName; } NETRESOURCE net; net.dwScope = 0; net.dwType = dwType; net.dwDisplayType = 0; net.dwUsage = 0; net.lpLocalName = NULL; net.lpRemoteName = pszRemoteName; net.lpComment = NULL; net.lpProvider = pszProviderName; BYTE buf[sizeof(NETRESOURCE) + MAX_PATH*2]; DWORD bufSize = sizeof(buf); DWORD bufSizeIn = bufSize; LPNETRESOURCE pnrOut = (LPNETRESOURCE)buf; // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNREMOTE, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNPROVIDER, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNTYPE, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNUSAGE, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNSCOPE, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNDISPLAYTYPE, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNLOCALNAME, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNCOMMENT, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZE, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZEIN, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = WNetGetResourceParent( &net, (LPVOID)buf, &bufSize); SetCursor(hOldCursor); DoError(hwnd, dw); TCHAR szBuf[MAX_PATH]; if (WN_SUCCESS == dw) { SetDlgItemText(hwnd, IDC_RETURNREMOTE, (NULL == pnrOut->lpRemoteName) ? TEXT("") : pnrOut->lpRemoteName); SetDlgItemText(hwnd, IDC_RETURNPROVIDER, (NULL == pnrOut->lpProvider) ? TEXT("") : pnrOut->lpProvider); GetTypeString(szBuf, pnrOut); SetDlgItemText(hwnd, IDC_RETURNTYPE, szBuf); GetUsageString(szBuf, pnrOut); SetDlgItemText(hwnd, IDC_RETURNUSAGE, szBuf); GetScopeString(szBuf, pnrOut); SetDlgItemText(hwnd, IDC_RETURNSCOPE, szBuf); GetDisplayTypeString(szBuf, pnrOut); SetDlgItemText(hwnd, IDC_RETURNDISPLAYTYPE, szBuf); SetDlgItemText(hwnd, IDC_RETURNLOCALNAME, (NULL == pnrOut->lpLocalName) ? TEXT("") : pnrOut->lpLocalName); SetDlgItemText(hwnd, IDC_RETURNCOMMENT, (NULL == pnrOut->lpComment) ? TEXT("") : pnrOut->lpComment); } wsprintf(szBuf, TEXT("%d"), bufSize); SetDlgItemText(hwnd, IDC_BUFSIZE, szBuf); wsprintf(szBuf, TEXT("%d"), bufSizeIn); SetDlgItemText(hwnd, IDC_BUFSIZEIN, szBuf); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; case IDC_REMOTE: EnableWindow(GetDlgItem(hwnd, IDC_REMOTE_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_REMOTE))); return TRUE; case IDC_PROVIDER: EnableWindow(GetDlgItem(hwnd, IDC_PROVIDER_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_PROVIDER))); return TRUE; } // end switch (LOWORD(wParam)) return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK GetUniversalNameDlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_LOCAL_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_LOCAL_TEXT), FALSE); CheckDlgButton(hwnd, IDC_LOCAL_TEXT, 0); CheckRadioButton(hwnd, IDC_UNIVERSALLEVEL, IDC_REMOTELEVEL, IDC_UNIVERSALLEVEL); SetDlgItemText(hwnd, IDC_RETURNUNIVERSAL, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNCONNECTION, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNREMAINING, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZE, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZEIN, TEXT("")); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { DWORD dwInfoLevel = 0; if (1 == IsDlgButtonChecked(hwnd, IDC_UNIVERSALLEVEL)) { dwInfoLevel = UNIVERSAL_NAME_INFO_LEVEL; } else if (1 == IsDlgButtonChecked(hwnd, IDC_REMOTELEVEL)) { dwInfoLevel = REMOTE_NAME_INFO_LEVEL; } else { // internal error } TCHAR szLocalName[200]; LPTSTR pszLocalName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_LOCAL)) { GetDlgItemText(hwnd, IDC_LOCAL_TEXT, szLocalName, ARRAYLEN(szLocalName)); pszLocalName = szLocalName; } BYTE buf[MAX_PATH*4]; // a large guess DWORD bufSize = sizeof(buf); DWORD bufSizeIn = bufSize; // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZE, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZEIN, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNUNIVERSAL, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNCONNECTION, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNREMAINING, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = WNetGetUniversalName( pszLocalName, dwInfoLevel, (LPVOID)buf, &bufSize); SetCursor(hOldCursor); DoError(hwnd, dw); TCHAR szBuf[MAX_PATH]; if (WN_SUCCESS == dw || WN_CONNECTION_CLOSED == dw) { switch (dwInfoLevel) { case UNIVERSAL_NAME_INFO_LEVEL: { LPUNIVERSAL_NAME_INFO pInfo = (LPUNIVERSAL_NAME_INFO)buf; SetDlgItemText(hwnd, IDC_RETURNUNIVERSAL, (NULL == pInfo->lpUniversalName) ? TEXT("") : pInfo->lpUniversalName); SetDlgItemText(hwnd, IDC_RETURNCONNECTION, TEXT("N/A")); SetDlgItemText(hwnd, IDC_RETURNREMAINING, TEXT("N/A")); break; } case REMOTE_NAME_INFO_LEVEL: { LPREMOTE_NAME_INFO pInfo = (LPREMOTE_NAME_INFO)buf; SetDlgItemText(hwnd, IDC_RETURNUNIVERSAL, (NULL == pInfo->lpUniversalName) ? TEXT("") : pInfo->lpUniversalName); SetDlgItemText(hwnd, IDC_RETURNCONNECTION, (NULL == pInfo->lpConnectionName) ? TEXT("") : pInfo->lpConnectionName); SetDlgItemText(hwnd, IDC_RETURNREMAINING, (NULL == pInfo->lpRemainingPath) ? TEXT("") : pInfo->lpRemainingPath); break; } default: // a bug! break; } } wsprintf(szBuf, TEXT("%d"), bufSize); SetDlgItemText(hwnd, IDC_BUFSIZE, szBuf); wsprintf(szBuf, TEXT("%d"), bufSizeIn); SetDlgItemText(hwnd, IDC_BUFSIZEIN, szBuf); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; case IDC_LOCAL: EnableWindow(GetDlgItem(hwnd, IDC_LOCAL_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_LOCAL))); return TRUE; } // end switch (LOWORD(wParam)) return FALSE; } default: return FALSE; // didn't process } } INT_PTR CALLBACK GetUserDlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: PlaceIt(hwnd); SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_NAME_TEXT, TEXT("")); EnableWindow(GetDlgItem(hwnd, IDC_NAME_TEXT), FALSE); CheckDlgButton(hwnd, IDC_NAME_TEXT, 0); SetDlgItemText(hwnd, IDC_RETURNUSER, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZE, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZEIN, TEXT("")); return 1; // didn't call SetFocus case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_GO: { TCHAR szName[200]; LPTSTR pszName = NULL; if (1 == IsDlgButtonChecked(hwnd, IDC_NAME)) { GetDlgItemText(hwnd, IDC_NAME_TEXT, szName, ARRAYLEN(szName)); pszName = szName; } TCHAR szUserName[MAX_PATH]; DWORD bufSize = ARRAYLEN(szUserName); DWORD bufSizeIn = bufSize; // clear it SetDlgItemText(hwnd, IDC_ERROR, TEXT("")); SetDlgItemText(hwnd, IDC_RETURNUSER, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZE, TEXT("")); SetDlgItemText(hwnd, IDC_BUFSIZEIN, TEXT("")); HCURSOR hOldCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); DWORD dw = WNetGetUser(pszName, szUserName, &bufSize); SetCursor(hOldCursor); DoError(hwnd, dw); TCHAR szBuf[MAX_PATH]; if (WN_SUCCESS == dw) { SetDlgItemText(hwnd, IDC_RETURNUSER, szUserName); } else { SetDlgItemText(hwnd, IDC_RETURNUSER, TEXT("")); } wsprintf(szBuf, TEXT("%d"), bufSize); SetDlgItemText(hwnd, IDC_BUFSIZE, szBuf); wsprintf(szBuf, TEXT("%d"), bufSizeIn); SetDlgItemText(hwnd, IDC_BUFSIZEIN, szBuf); return TRUE; } case IDOK: EndDialog(hwnd, TRUE); return TRUE; case IDC_NAME: EnableWindow(GetDlgItem(hwnd, IDC_NAME_TEXT), (1 == IsDlgButtonChecked(hwnd, IDC_NAME))); return TRUE; } // end switch (LOWORD(wParam)) return FALSE; } default: return FALSE; // didn't process } } DWORD CALLBACK DialogThreadProc( LPVOID lpThreadParameter ) { DWORD idCmd = PtrToUlong(lpThreadParameter); switch (idCmd) { case IDC_CONNECTIONDIALOG1: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_CONNECTIONDIALOG1), NULL, Connection1DlgProc); break; case IDC_DISCONNECTDIALOG1: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_DISCONNECTDIALOG1), NULL, Disconnect1DlgProc); break; case IDC_CONNECTIONDIALOG: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_CONNECTIONDIALOG), NULL, ConnectionDlgProc); break; case IDC_DISCONNECTDIALOG: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_DISCONNECTDIALOG), NULL, DisconnectDlgProc); break; case IDC_CONNECTIONDIALOG2: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_CONNECTIONDIALOG2), NULL, Connection2DlgProc); break; case IDC_DISCONNECTDIALOG2: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_DISCONNECTDIALOG2), NULL, Disconnect2DlgProc); break; case IDC_BROWSEDIALOG: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_BROWSEDIALOG), NULL, BrowseDlgProc); break; case IDC_GETCONNECTION: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_GETCONNECTION), NULL, GetConnectionDlgProc); break; case IDC_GETCONNECTION2: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_GETCONNECTION2), NULL, GetConnectionDlgProc2); break; case IDC_GETCONNECTION3: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_GETCONNECTION3), NULL, GetConnection3DlgProc); break; case IDC_GETCONNECTIONPERFORMANCE: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_GETCONNECTIONPERFORMANCE), NULL, GetConnectionPerformanceDlgProc); break; case IDC_FORMATNETWORKNAME: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_FORMATNETWORKNAME), NULL, FormatNetworkNameDlgProc); break; case IDC_GETNETWORKINFORMATION: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_GETNETWORKINFORMATION), NULL, GetNetworkInformationDlgProc); break; case IDC_GETPROVIDERNAME: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_GETPROVIDERNAME), NULL, GetProviderNameDlgProc); break; case IDC_GETPROVIDERTYPE: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_GETPROVIDERTYPE), NULL, GetProviderTypeDlgProc); break; case IDC_CANCELCONNECTION: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_CANCELCONNECTION), NULL, CancelConnectionDlgProc); break; case IDC_CANCELCONNECTION2: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_CANCELCONNECTION2), NULL, CancelConnection2DlgProc); break; case IDC_ADDCONNECTION: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_ADDCONNECTION), NULL, AddConnectionDlgProc); break; case IDC_ADDCONNECTION2: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_ADDCONNECTION2), NULL, AddConnection2DlgProc); break; case IDC_ADDCONNECTION3: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_ADDCONNECTION3), NULL, AddConnection3DlgProc); break; case IDC_USECONNECTION: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_USECONNECTION), NULL, UseConnectionDlgProc); break; case IDC_GETRESOURCEINFORMATION: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_GETRESOURCEINFORMATION), NULL, GetResourceInformationDlgProc); break; case IDC_GETRESOURCEPARENT: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_GETRESOURCEPARENT), NULL, GetResourceParentDlgProc); break; case IDC_GETUNIVERSALNAME: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_GETUNIVERSALNAME), NULL, GetUniversalNameDlgProc); break; case IDC_GETUSER: DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_GETUSER), NULL, GetUserDlgProc); break; } return 0; } BOOL CALLBACK DlgProc( IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam ) { switch (uMsg) { case WM_INITDIALOG: #ifdef UNICODE SetWindowText(hwnd, TEXT("WNet tests -- UNICODE strings version")); #else // UNICODE SetWindowText(hwnd, TEXT("WNet tests -- ANSI strings version")); #endif // UNICODE return 1; // didn't call SetFocus case WM_DEVICECHANGE: { TCHAR sz[500]; _tcscpy(sz, TEXT("WM_DEVICECHANGE ")); LPTSTR pszType = NULL; switch (wParam) { case DBT_APPYBEGIN: pszType = TEXT("DBT_APPYBEGIN "); break; case DBT_APPYEND: pszType = TEXT("DBT_APPYEND "); break; case DBT_DEVNODES_CHANGED: pszType = TEXT("DBT_DEVNODES_CHANGED "); break; case DBT_QUERYCHANGECONFIG: pszType = TEXT("DBT_QUERYCHANGECONFIG "); break; case DBT_CONFIGCHANGED: pszType = TEXT("DBT_CONFIGCHANGED "); break; case DBT_CONFIGCHANGECANCELED: pszType = TEXT("DBT_CONFIGCHANGECANCELED "); break; case DBT_MONITORCHANGE: pszType = TEXT("DBT_MONITORCHANGE "); break; case DBT_SHELLLOGGEDON: pszType = TEXT("DBT_SHELLLOGGEDON "); break; case DBT_CONFIGMGAPI32: pszType = TEXT("DBT_CONFIGMGAPI32 "); break; case DBT_VOLLOCKQUERYLOCK: pszType = TEXT("DBT_VOLLOCKQUERYLOCK "); break; case DBT_VOLLOCKLOCKTAKEN: pszType = TEXT("DBT_VOLLOCKLOCKTAKEN "); break; case DBT_VOLLOCKLOCKFAILED: pszType = TEXT("DBT_VOLLOCKLOCKFAILED "); break; case DBT_VOLLOCKQUERYUNLOCK: pszType = TEXT("DBT_VOLLOCKQUERYUNLOCK "); break; case DBT_VOLLOCKLOCKRELEASED: pszType = TEXT("DBT_VOLLOCKLOCKRELEASED "); break; case DBT_VOLLOCKUNLOCKFAILED: pszType = TEXT("DBT_VOLLOCKUNLOCKFAILED "); break; case DBT_NO_DISK_SPACE: pszType = TEXT("DBT_NO_DISK_SPACE "); break; case DBT_DEVICEARRIVAL: pszType = TEXT("DBT_DEVICEARRIVAL "); break; case DBT_DEVICEQUERYREMOVE: pszType = TEXT("DBT_DEVICEQUERYREMOVE "); break; case DBT_DEVICEQUERYREMOVEFAILED: pszType = TEXT("DBT_DEVICEQUERYREMOVEFAILED "); break; case DBT_DEVICEREMOVEPENDING: pszType = TEXT("DBT_DEVICEREMOVEPENDING "); break; case DBT_DEVICEREMOVECOMPLETE: pszType = TEXT("DBT_DEVICEREMOVECOMPLETE "); break; case DBT_DEVICETYPESPECIFIC: pszType = TEXT("DBT_DEVICETYPESPECIFIC "); break; case DBT_VPOWERDAPI: pszType = TEXT("DBT_VPOWERDAPI "); break; case DBT_USERDEFINED: pszType = TEXT("DBT_USERDEFINED "); break; default: pszType = TEXT("Unknown "); break; } _tcscat(sz, pszType); switch (wParam) { case DBT_DEVICEARRIVAL: case DBT_DEVICEREMOVECOMPLETE: { _DEV_BROADCAST_HEADER* phdr = (_DEV_BROADCAST_HEADER*)lParam; if (phdr->dbcd_devicetype == DBT_DEVTYP_VOLUME) { _tcscat(sz, TEXT("DBT_DEVTYP_VOLUME ")); DEV_BROADCAST_VOLUME* pdbv = (DEV_BROADCAST_VOLUME*)lParam; TCHAR szT[4]; szT[1] = TEXT(':'); szT[2] = TEXT(' '); szT[3] = TEXT('\0'); DWORD dw = pdbv->dbcv_unitmask; DWORD count = 0; while (dw > 0) { if (dw & 1) { szT[0] = (TCHAR)(TEXT('A') + count); _tcscat(sz, szT); } ++count; dw >>= 1; } switch (pdbv->dbcv_flags) { case DBTF_MEDIA: _tcscat(sz, TEXT("DBTF_MEDIA ")); break; case DBTF_NET: _tcscat(sz, TEXT("DBTF_NET ")); break; default: _tcscat(sz, TEXT("Unknown ")); break; } } break; } } _tcscat(sz, TEXT("\r\n")); SendDlgItemMessage(hwnd, IDC_MESSAGES, EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)sz); } case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_CONNECTIONDIALOG1: case IDC_DISCONNECTDIALOG1: case IDC_CONNECTIONDIALOG2: case IDC_DISCONNECTDIALOG2: case IDC_CONNECTIONDIALOG: case IDC_DISCONNECTDIALOG: case IDC_BROWSEDIALOG: case IDC_GETCONNECTION: case IDC_GETCONNECTION2: case IDC_GETCONNECTION3: case IDC_GETCONNECTIONPERFORMANCE: case IDC_FORMATNETWORKNAME: case IDC_GETNETWORKINFORMATION: case IDC_GETPROVIDERNAME: case IDC_GETPROVIDERTYPE: case IDC_CANCELCONNECTION: case IDC_CANCELCONNECTION2: case IDC_ADDCONNECTION: case IDC_ADDCONNECTION2: case IDC_ADDCONNECTION3: case IDC_USECONNECTION: case IDC_GETRESOURCEINFORMATION: case IDC_GETRESOURCEPARENT: case IDC_GETUNIVERSALNAME: case IDC_GETUSER: { DWORD idThread; HANDLE hThread = CreateThread(NULL, 0, DialogThreadProc, (LPVOID)(LOWORD(wParam)), 0, &idThread); if (hThread) { CloseHandle(hThread); } else { MessageBox(hwnd, TEXT("Couldn't create dialog box thread"), TEXT("Error!"), MB_OK); } break; } case IDC_ENUMERATE: DoEnumeration(hwnd); break; case IDOK: EndDialog(hwnd, TRUE); return TRUE; } return FALSE; } default: return FALSE; // didn't process } } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ) { g_hInstance = hInstance; DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_ROOT), NULL, (DLGPROC) DlgProc); if (NULL != g_hInstanceMpr) { FreeLibrary(g_hInstanceMpr); } return 0; }