/*****************************************************************************\ * MODULE: configdlg.cxx * * The module contains routines for handling the authentication dialog * for internet priting * * Copyright (C) 1996-1998 Microsoft Corporation * * History: * 07/31/98 WeihaiC Created * 04/10/00 WeihaiC Moved it to client side * \*****************************************************************************/ #include "precomp.h" #include "priv.h" TXcvDlg::TXcvDlg ( LPCWSTR pServerName, HWND hWnd, LPCWSTR pszPortName): m_pServerName (pServerName), m_hWnd (hWnd), m_pszPortName (pszPortName), m_pXcvName (NULL), m_hXcvPort (NULL), m_bAdmin (FALSE), m_hInst (NULL), m_dwLE (ERROR_SUCCESS), m_bValid (FALSE) { DWORD cbNeeded, dwStatus; PRINTER_DEFAULTS pd = {NULL, NULL, SERVER_ALL_ACCESS}; HANDLE hServer; BOOL bRet = FALSE; if (OpenPrinter (NULL, &hServer, &pd)) { ClosePrinter (hServer); m_bAdmin = TRUE; } if (m_pXcvName = ConstructXcvName (m_pServerName, m_pszPortName, L"XcvPort")) { if (OpenPrinter (m_pXcvName, &m_hXcvPort, NULL)) { m_bValid = TRUE; } } } TXcvDlg::~TXcvDlg () { if (m_pXcvName) { FreeSplMem(m_pXcvName); } if (m_hXcvPort) { ClosePrinter (m_hXcvPort); } } PWSTR TXcvDlg::ConstructXcvName( PCWSTR pServerName, PCWSTR pObjectName, PCWSTR pObjectType ) { DWORD dwRet = ERROR_SUCCESS; PCWSTR pOut = NULL; // // The returned xcv name can be of two basic forms. The first // form is were the server name is non null and the other is // if the server name is null or a null string. // // Example 1 // // pServerName = NULL; // pObjectName = IP_1.2.3.4 // pObjectType = XcvPort // // Returned String // // ,XcvPort IP_1.2.3.4 // // Example 2 // // pServerName = \\Server1 // pObjectName = IP_1.2.3.4 // pObjectType = XcvPort // // Returned String // // \\Server1\,XcvPort IP_1.2.3.4 // dwRet = StrCatAlloc(&pOut, (pServerName && *pServerName) ? pServerName : L"", (pServerName && *pServerName) ? L"\\" : L"", L",", pObjectType, L" ", pObjectName, NULL); // // Use the return value not the out pointer. // return dwRet == ERROR_SUCCESS ? (PWSTR)pOut : NULL; } VOID TXcvDlg::DisplayLastError ( HWND hWnd, UINT iTitle) { DisplayErrorMsg (m_hInst, hWnd, iTitle, GetLastError ()); } VOID TXcvDlg::DisplayErrorMsg ( HINSTANCE hInst, HWND hWnd, UINT iTitle, DWORD dwLE) { TCHAR szBuf[MAX_BUF_SIZE]; TCHAR szMsgBuf[MAX_BUF_SIZE]; UINT iMsg; LPTSTR lpMsgBuf = NULL; BOOL bFound = TRUE; switch (dwLE) { case ERROR_ACCESS_DENIED: iMsg = IDS_ACCESS_DENIED; break; case ERROR_INVALID_NAME: case ERROR_INVALID_PRINTER_NAME: iMsg = IDS_INVALID_PRINTER_NAME; break; case ERROR_INTERNET_TIMEOUT: iMsg = IDS_NETWORK_TIMEOUT; break; case ERROR_DEVICE_REINITIALIZATION_NEEDED: iMsg = IDS_INITIALIZATION_ERROR; break; case ERROR_NOT_FOUND: iMsg = IDS_PORT_DELETED; break; default: bFound = FALSE; break; } if (LoadString (hInst, iTitle, szBuf, MAX_BUF_SIZE)) { if (bFound) { if (LoadString (hInst, iMsg, szMsgBuf, MAX_BUF_SIZE)) MessageBox( hWnd, szMsgBuf, szBuf, MB_OK | MB_ICONERROR); } else { if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL) && lpMsgBuf) { MessageBox( hWnd, (LPCTSTR)lpMsgBuf, szBuf, MB_OK | MB_ICONERROR ); // Free the buffer. LocalFree( lpMsgBuf ); } else { // // Most likely it is because we've got an error code from wininet, where // we can not locate the resource file // if (LoadString (hInst, IDS_INVALID_SETTING, szMsgBuf, MAX_BUF_SIZE)) MessageBox( hWnd, szMsgBuf, szBuf, MB_OK | MB_ICONERROR); } } } }