|
|
/*++
Copyright (C) Microsoft Corporation, 1997 - 1997 All rights reserved.
Module Name:
permc.cxx
Abstract:
Per Machine Connections
Author:
Ramanathan Venkatapathy (3/18/97)
Revision History:
--*/
#include "precomp.hxx"
#pragma hdrstop
#include "permc.hxx"
#include "rundll.hxx"
VOID vAddPerMachineConnection( IN LPCTSTR pServer, IN LPCTSTR pPrinterName, IN LPCTSTR pProvider, IN BOOL bQuiet ) /*++
Function Description: This function calls AddPerMachineConnection API. If the call fails and quiet mode is not set, a message box gives the last error.
Parameters: pServer,pPrinterName,pPrintServer,pProvider - arguments for the AddPerMachineConnection API call. bQuiet - flag for quiet mode. This is set if /q option is used.
Return Value: NONE.
--*/ { LPCTSTR pPrintServer; LPCTSTR pPrinter; TCHAR szScratch[kPrinterBufMax];
//
// Split the printer name into its components.
//
vPrinterSplitFullName( szScratch, pPrinterName, &pPrintServer, &pPrinter );
if (!AddPerMachineConnection(pServer,pPrinterName,pPrintServer,pProvider) && !bQuiet) { iMessage( NULL, IDS_RUNDLL_TITLE, IDS_ERR_ADD_MACHINE_CONNECTION, MB_OK|MB_ICONSTOP|MB_SETFOREGROUND, kMsgGetLastError, NULL ); } }
VOID vDeletePerMachineConnection( IN LPCTSTR pServer, IN LPCTSTR pPrinterName, IN BOOL bQuiet ) /*++
Function Description: This function calls DeletePerMachineConnection API. If the call fails and quiet mode is not set, a message box gives the last error.
Parameters: pServer,pPrinterName - arguments for the DeletePerMachineConnection API call. bQuiet - flag for quiet mode. This is set if /q option is used.
Return Value: NONE.
--*/ {
if (!DeletePerMachineConnection(pServer,pPrinterName) && !bQuiet) { iMessage( NULL, IDS_RUNDLL_TITLE, IDS_ERR_DELETE_MACHINE_CONNECTION, MB_OK|MB_ICONSTOP|MB_SETFOREGROUND, kMsgGetLastError, NULL ); }
}
VOID vEnumPerMachineConnections( IN LPCTSTR pServer, IN LPCTSTR pszFileName, IN BOOL bQuiet ) /*++
Function Description: This function calls the EnumPerMachineConnection API to enumerate the per machine printer connections at pServer.
Parameters: pServer - pointer to the name of the machine on which the per machine connections are to be enumerated. pszFileName - pointer to the file name where the connection data is to be dumped. If it is NULL or szNULL, the data is displayed in a EditBox. bQuiet - flag indicating quiet mode. It is set by using the /q option.
Return Values: NONE. --*/ { DWORD cbBuf = 0; DWORD cbNeeded; DWORD cReturned; DWORD dwWritten; PPRINTER_INFO_4 pPrinterEnum=NULL; DWORD index; TStatusB bStatus; HANDLE hOutputFile = NULL; TCHAR szNewLine[] = TEXT("\r\n");
bStatus DBGNOCHK = TRUE;
TRunDllDisplay PrEnum(NULL, pszFileName, (pszFileName && *pszFileName) ? TRunDllDisplay::kFile : TRunDllDisplay::kEditBox);
bStatus DBGCHK = VALID_OBJ( PrEnum );
if (bStatus) {
if (!(pszFileName && *pszFileName)) {
TString strTemp; if (bStatus DBGCHK = strTemp.bLoadString( ghInst, IDS_ERR_RUNDLL_MACHINE_CONNECTION )) {
bStatus DBGCHK = PrEnum.SetTitle( strTemp ); } } }
if (bStatus) {
cbBuf = 1000; if (!(pPrinterEnum = (PPRINTER_INFO_4) AllocMem(cbBuf))) { bStatus DBGCHK = FALSE; } }
if (bStatus) { while (!(bStatus DBGCHK = EnumPerMachineConnections(pServer,(LPBYTE)pPrinterEnum,cbBuf, &cbNeeded,&cReturned)) && (GetLastError() == ERROR_INSUFFICIENT_BUFFER)) {
FreeMem(pPrinterEnum); if (!(pPrinterEnum = (PPRINTER_INFO_4) AllocMem(cbNeeded))) { bStatus DBGCHK = FALSE; break; } cbBuf = cbNeeded; } }
if (bStatus) { for (index=0;cReturned;cReturned--,index++) { if (!PrEnum.WriteOut(TEXT("Printer Name: ")) || !PrEnum.WriteOut(pPrinterEnum[index].pPrinterName) || !PrEnum.WriteOut(szNewLine) || !PrEnum.WriteOut(TEXT("Server Name: ")) || !PrEnum.WriteOut(pPrinterEnum[index].pServerName) || !PrEnum.WriteOut(szNewLine) || !PrEnum.WriteOut(szNewLine)) {
bStatus DBGCHK = FALSE; break; } } }
if (bStatus) { PrEnum.bDoModal(); }
if (pPrinterEnum) { FreeMem(pPrinterEnum); }
if (!bStatus && !bQuiet) { iMessage( NULL, IDS_RUNDLL_TITLE, IDS_ERR_ENUM_MACHINE_CONNECTION, MB_OK|MB_ICONSTOP|MB_SETFOREGROUND, GetLastError() != ERROR_SUCCESS ? kMsgGetLastError : kMsgNone, NULL ); }
return; }
|