You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
634 lines
16 KiB
634 lines
16 KiB
/*++
|
|
|
|
Copyright (C) Microsoft Corporation, 1990 - 1999
|
|
All rights reserved
|
|
|
|
Module Name:
|
|
|
|
browse.hxx
|
|
|
|
Abstract:
|
|
|
|
Header file for browse for pinter dialog
|
|
|
|
Author:
|
|
|
|
Dave Snipp (DaveSn) 15 Mar 1991
|
|
Steve Kiraly (SteveKi) 1 May 1998
|
|
|
|
Environment:
|
|
|
|
User Mode Win32
|
|
|
|
Revision History:
|
|
|
|
1 May 1998 move from winspoo.drv to printui.dll
|
|
|
|
--*/
|
|
#ifndef _BROWSE_HXX_
|
|
#define _BROWSE_HXX_
|
|
|
|
/*
|
|
* IDs passed to WinHelp:
|
|
*/
|
|
#define IDH_PRT_CTP_PRINTER 76000 // Printer
|
|
#define IDH_PRT_CTP_SHARED_PRINTERS 76010 // Shared Printers
|
|
#define IDH_PRT_CTP_EXPAND_DEFAULT 76020 // Expand by Default checkbox
|
|
#define IDH_PRT_CTP_DESCRIPTION 76030 // Printer Info group--Description
|
|
#define IDH_PRT_CTP_STATUS 76040 // Printer Info group--Status
|
|
#define IDH_PRT_CTP_DOCS_WAITING 76050 // Printer Info group--Documents Waiting
|
|
#define IDH_NOHELP ((DWORD)-1) // Disables Help for a control (for help compiles)
|
|
|
|
/* Space for 21x16 status bitmaps:
|
|
*/
|
|
#define STATUS_BITMAP_WIDTH 21
|
|
#define STATUS_BITMAP_HEIGHT 16
|
|
#define STATUS_BITMAP_MARGIN 4 /* (either side) */
|
|
#define STATUS_BITMAP_SPACE ( STATUS_BITMAP_WIDTH + ( 2 * STATUS_BITMAP_MARGIN ) )
|
|
|
|
#define PRINTER_STATUS_UNKNOWN 8000
|
|
|
|
#define BM_IND_CONNECTTO_DOMPLUS 0
|
|
#define BM_IND_CONNECTTO_DOMEXPAND ( 2 * STATUS_BITMAP_HEIGHT )
|
|
|
|
#define BROWSE_THREAD_ENUM_OBJECTS 1
|
|
#define BROWSE_THREAD_GET_PRINTER 2
|
|
#define BROWSE_THREAD_TERMINATE 4
|
|
#define BROWSE_THREAD_DELETE 8
|
|
|
|
#define WM_ENUM_OBJECTS_COMPLETE WM_APP+0x10
|
|
#define WM_GET_PRINTER_COMPLETE WM_APP+0x11
|
|
#define WM_GET_PRINTER_ERROR WM_APP+0x12
|
|
#define WM_QUIT_BROWSE WM_APP+0x14
|
|
|
|
#define EMPTY_CONTAINER (PCONNECTTO_OBJECT)(-1)
|
|
|
|
#define BACKGROUND 0x0000FF00 // bright green
|
|
#define BACKGROUNDSEL 0x00FF00FF // bright magenta
|
|
#define BUTTONFACE 0x00C0C0C0 // bright grey
|
|
#define BUTTONSHADOW 0x00808080 // dark grey
|
|
|
|
#define SPOOLER_VERSION 3
|
|
|
|
//
|
|
// Define some constants to make parameters to CreateEvent a tad less obscure:
|
|
//
|
|
#define EVENT_RESET_MANUAL TRUE
|
|
#define EVENT_RESET_AUTOMATIC FALSE
|
|
#define EVENT_INITIAL_STATE_SIGNALED TRUE
|
|
#define EVENT_INITIAL_STATE_NOT_SIGNALED FALSE
|
|
|
|
#define OUTPUT_BUFFER_LENGTH 512
|
|
#define COLUMN_SEPARATOR_WIDTH 4
|
|
#define COLUMN_WIDTH 180
|
|
|
|
#define BROWSE_STATUS_INITIAL 0x00000001
|
|
#define BROWSE_STATUS_EXPAND 0x00000002
|
|
|
|
#define GET_BROWSE_DLG_DATA(hwnd) \
|
|
reinterpret_cast<PBROWSE_DLG_DATA>(GetWindowLongPtr(hwnd, GWLP_USERDATA))
|
|
|
|
#define SET_BROWSE_DLG_DATA(hwnd, pBrowseDlgData) \
|
|
SetWindowLongPtr(hwnd, GWLP_USERDATA, reinterpret_cast<ULONG_PTR>(pBrowseDlgData))
|
|
|
|
#define GET_CONNECTTO_DATA( hwnd ) (GET_BROWSE_DLG_DATA( hwnd ))->pConnectToData
|
|
|
|
#define SETLISTCOUNT(hwnd, Count) \
|
|
SendDlgItemMessage(hwnd, IDD_BROWSE_SELECT_LB, LB_SETCOUNT, Count, 0)
|
|
|
|
#define SETLISTSEL(hwnd, Sel) \
|
|
SendDlgItemMessage(hwnd, IDD_BROWSE_SELECT_LB, LB_SETCURSEL, Sel, 0)
|
|
|
|
#define GETLISTSEL(hwnd) \
|
|
SendDlgItemMessage(hwnd, IDD_BROWSE_SELECT_LB, LB_GETCURSEL, 0, 0)
|
|
|
|
#define ENABLE_LIST(hwnd) \
|
|
EnableWindow( GetDlgItem( hwnd, IDD_BROWSE_SELECT_LB ), TRUE )
|
|
|
|
#define DISABLE_LIST(hwnd) \
|
|
EnableWindow( GetDlgItem( hwnd, IDD_BROWSE_SELECT_LB ), FALSE )
|
|
|
|
#define ENTER_CRITICAL( pBrowseDlgData ) \
|
|
pBrowseDlgData->csLock.Lock()
|
|
|
|
#define LEAVE_CRITICAL( pBrowseDlgData ) \
|
|
pBrowseDlgData->csLock.Unlock()
|
|
|
|
/* The following macros are used for communication between the main GUI thread
|
|
* and the browsing thread.
|
|
* They are implemented as macros and defined here for ease of comprehension.
|
|
*/
|
|
|
|
|
|
/* SEND_BROWSE_THREAD_REQUEST
|
|
*
|
|
* The main thread calls this when it wants the browse thread to do browse
|
|
* for something. If the browse thread is currently browsing, it will not
|
|
* fulfil this request until it returns and waits on the Event again by
|
|
* calling RECEIVE_BROWSE_THREAD_REQUEST.
|
|
*/
|
|
#if DBG
|
|
#define SEND_BROWSE_THREAD_REQUEST(pBrowseDlgData, ReqId, pEnumName, pEnumObj) \
|
|
ASSERT( pBrowseDlgData->csLock.bInside() ); \
|
|
(pBrowseDlgData)->RequestId = ReqId; \
|
|
(pBrowseDlgData)->pEnumerateName = pEnumName; \
|
|
(pBrowseDlgData)->pEnumerateObject = pEnumObj; \
|
|
SetEvent( (pBrowseDlgData)->Request )
|
|
#else
|
|
#define SEND_BROWSE_THREAD_REQUEST(pBrowseDlgData, ReqId, pEnumName, pEnumObj) \
|
|
(pBrowseDlgData)->RequestId = ReqId; \
|
|
(pBrowseDlgData)->pEnumerateName = pEnumName; \
|
|
(pBrowseDlgData)->pEnumerateObject = pEnumObj; \
|
|
SetEvent( (pBrowseDlgData)->Request )
|
|
#endif /* DBG */
|
|
|
|
/* RECEIVE_BROWSE_THREAD_REQUEST
|
|
*
|
|
* The browse thread calls this when it is idle and waiting for a request.
|
|
*/
|
|
#define RECEIVE_BROWSE_THREAD_REQUEST(pBrowseDlgData, ReqId, pEnumName, pEnumObj) \
|
|
WaitForSingleObject( (pBrowseDlgData)->Request, INFINITE ), \
|
|
ENTER_CRITICAL( pBrowseDlgData ), \
|
|
ReqId = (pBrowseDlgData)->RequestId, \
|
|
pEnumName = (pBrowseDlgData)->pEnumerateName, \
|
|
pEnumObj = (pBrowseDlgData)->pEnumerateObject, \
|
|
LEAVE_CRITICAL( pBrowseDlgData )
|
|
|
|
/* SEND_BROWSE_THREAD_REQUEST_COMPLETE
|
|
*
|
|
* When the browse thread returns with the browse data, it sets the
|
|
* RequestComplete event. This is waited on by the main window thread
|
|
* when it calls MsgWaitForMultipleObjects in its main message loop.
|
|
*/
|
|
#define SEND_BROWSE_THREAD_REQUEST_COMPLETE(pBrowseDlgData, message, wP, lP) \
|
|
(pBrowseDlgData)->Message = message, \
|
|
(pBrowseDlgData)->wParam = (WPARAM)wP, \
|
|
(pBrowseDlgData)->lParam = (LPARAM)lP, \
|
|
SetEvent( (pBrowseDlgData)->RequestComplete ); \
|
|
PostMessage( pBrowseDlgData->hwndDialog, pBrowseDlgData->Message, 0, (LPARAM)pBrowseDlgData)
|
|
|
|
typedef struct _CONNECTTO_OBJECT
|
|
{
|
|
PPRINTER_INFO_1 pPrinterInfo; // Points to an array returned by EnumPrinters
|
|
struct _CONNECTTO_OBJECT *pSubObject; // Result of enumerating on this object
|
|
DWORD cSubObjects; // Number of objects found
|
|
DWORD cbPrinterInfo; // Size of buffer containing enumerated objects
|
|
} CONNECTTO_OBJECT, *PCONNECTTO_OBJECT;
|
|
|
|
struct BROWSE_DLG_DATA : public MRefCom
|
|
{
|
|
/* These fields are referenced only by the main thread:
|
|
*/
|
|
DWORD Status;
|
|
DWORD cExpandObjects;
|
|
DWORD ExpandSelection;
|
|
DWORD dwExtent;
|
|
|
|
/* These fields may be referenced by either thread,
|
|
* so access must be serialized by the critical section:
|
|
*/
|
|
PCONNECTTO_OBJECT pConnectToData;
|
|
|
|
HANDLE Request; /* Set when main thread has written request */
|
|
DWORD RequestId; /* BROWSE_THREAD_* */
|
|
LPTSTR pEnumerateName; /* Name of object to get, if appropriate */
|
|
PVOID pEnumerateObject; /* Buffer appropriate to RequestId */
|
|
|
|
HANDLE RequestComplete; /* Set when browse thread has returned data */
|
|
DWORD Message; /* Message to post to main dialog windows */
|
|
WPARAM wParam;
|
|
LPARAM lParam;
|
|
|
|
/* This is for printer info, and will be freed by the browse thread:
|
|
*/
|
|
LPPRINTER_INFO_2 pPrinterInfo;
|
|
DWORD cbPrinterInfo;
|
|
|
|
// critical section lock
|
|
CCSLock csLock;
|
|
|
|
HWND hwndParent;
|
|
HANDLE hPrinter;
|
|
DWORD Flags;
|
|
HWND hwndDialog;
|
|
|
|
BOOL _bValid;
|
|
|
|
HCURSOR hcursorArrow;
|
|
HCURSOR hcursorWait;
|
|
|
|
/*
|
|
* For leveraging the code to be used with
|
|
* property page
|
|
*/
|
|
IPageSwitch *pPageSwitchController;
|
|
BOOL bInPropertyPage;
|
|
|
|
BROWSE_DLG_DATA(
|
|
VOID
|
|
);
|
|
|
|
~BROWSE_DLG_DATA(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
bValid(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
vRefZeroed(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
bInitializeBrowseThread(
|
|
HWND hWnd
|
|
);
|
|
|
|
};
|
|
|
|
typedef BROWSE_DLG_DATA *PBROWSE_DLG_DATA;
|
|
|
|
struct SPLSETUP_DATA
|
|
{
|
|
// ntprint.dll module
|
|
HINSTANCE hModule;
|
|
|
|
// driver info
|
|
HDEVINFO hDevInfo;
|
|
PPSETUP_LOCAL_DATA pSetupLocalData;
|
|
|
|
// ntprint.dll exported functions
|
|
pfPSetupCreatePrinterDeviceInfoList pfnCreatePrinterDeviceInfoList;
|
|
pfPSetupDestroyPrinterDeviceInfoList pfnDestroyPrinterDeviceInfoList;
|
|
pfPSetupSelectDriver pfnSelectDriver;
|
|
pfPSetupGetSelectedDriverInfo pfnGetSelectedDriverInfo;
|
|
pfPSetupDestroySelectedDriverInfo pfnDestroySelectedDriverInfo;
|
|
pfPSetupInstallPrinterDriver pfnInstallPrinterDriver;
|
|
pfPSetupThisPlatform pfnThisPlatform;
|
|
pfPSetupDriverInfoFromName pfnDriverInfoFromName;
|
|
pfPSetupGetPathToSearch pfnGetPathToSearch;
|
|
pfPSetupBuildDriversFromPath pfnBuildDriversFromPath;
|
|
pfPSetupIsDriverInstalled pfnIsDriverInstalled;
|
|
pfPSetupGetLocalDataField pfnGetLocalDataField;
|
|
pfPSetupFreeDrvField pfnFreeDrvField;
|
|
pfPSetupProcessPrinterAdded pfnProcessPrinterAdded;
|
|
pfPSetupFindMappedDriver pfnFindMappedDriver;
|
|
pfPSetupInstallInboxDriverSilently pfnInstallInboxDriverSilently;
|
|
pfPSetupFreeMem pfnFreeMem;
|
|
|
|
// is the structure valid
|
|
BOOL bValid;
|
|
BOOL bDriverAdded;
|
|
DWORD dwLastError;
|
|
|
|
SPLSETUP_DATA(
|
|
VOID
|
|
);
|
|
|
|
~SPLSETUP_DATA(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
FreeDriverInfo(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
LoadDriverInfo(
|
|
IN HWND hwnd,
|
|
IN LPWSTR pszDriver
|
|
);
|
|
|
|
BOOL
|
|
LoadKnownDriverInfo(
|
|
IN HWND hwnd,
|
|
IN LPWSTR pszDriver
|
|
);
|
|
|
|
VOID
|
|
ReportErrorMessage(
|
|
IN HWND hwnd
|
|
);
|
|
};
|
|
|
|
DWORD
|
|
EnumConnectToObjects(
|
|
PBROWSE_DLG_DATA pBrowseDlgData,
|
|
PCONNECTTO_OBJECT pConnectToParent,
|
|
LPTSTR pParentName
|
|
);
|
|
|
|
DWORD
|
|
FreeConnectToObjects(
|
|
IN PCONNECTTO_OBJECT pFirstConnectToObject,
|
|
IN DWORD cThisLevelObjects,
|
|
IN DWORD cbPrinterInfo
|
|
);
|
|
|
|
VOID
|
|
BrowseThread(
|
|
PBROWSE_DLG_DATA pBrowseDlgData
|
|
);
|
|
|
|
BOOL APIENTRY
|
|
InstallDriverDialog(
|
|
HWND hWnd,
|
|
UINT usMsg,
|
|
WPARAM wParam,
|
|
LONG lParam
|
|
);
|
|
|
|
BOOL APIENTRY
|
|
NetworkPasswordDialog(
|
|
HWND hWnd,
|
|
UINT usMsg,
|
|
WPARAM wParam,
|
|
LONG lParam
|
|
);
|
|
|
|
LPTSTR
|
|
AllocDlgItemText(
|
|
HWND hwnd,
|
|
INT id
|
|
);
|
|
|
|
LPTSTR
|
|
GetErrorString(
|
|
DWORD Error
|
|
);
|
|
|
|
DWORD
|
|
ReportFailure(
|
|
HWND hwndParent,
|
|
DWORD idTitle,
|
|
DWORD idDefaultError
|
|
);
|
|
|
|
HANDLE
|
|
AddPrinterConnectionUI(
|
|
HWND hwnd,
|
|
LPCTSTR pszPrinter,
|
|
PBOOL pbAdded
|
|
);
|
|
|
|
LPTSTR
|
|
AllocSplStr(
|
|
LPCTSTR pStr
|
|
);
|
|
|
|
BOOL
|
|
FreeSplStr(
|
|
LPTSTR pStr
|
|
);
|
|
|
|
LPVOID
|
|
AllocSplMem(
|
|
DWORD cb
|
|
);
|
|
|
|
BOOL
|
|
FreeSplMem(
|
|
LPVOID pMem
|
|
);
|
|
|
|
LPVOID
|
|
ReallocSplMem(
|
|
LPVOID pOldMem,
|
|
DWORD cbOld,
|
|
DWORD cbNew
|
|
);
|
|
|
|
BOOL
|
|
PreDialog(
|
|
HWND hwndDialog,
|
|
PBROWSE_DLG_DATA pBrowseDlgData
|
|
);
|
|
|
|
VOID
|
|
PostDialog(
|
|
PBROWSE_DLG_DATA pBrowseDlgData
|
|
);
|
|
|
|
BOOL
|
|
SetDevMode(
|
|
HANDLE hPrinter
|
|
);
|
|
|
|
BOOL
|
|
ConnectToInitDialog(
|
|
HWND hWnd,
|
|
PBROWSE_DLG_DATA pBrowseDlgData
|
|
);
|
|
|
|
VOID ConnectToMeasureItem( HWND hwnd, LPMEASUREITEMSTRUCT pmis );
|
|
|
|
BOOL ConnectToDrawItem( HWND hwnd, LPDRAWITEMSTRUCT pdis );
|
|
|
|
LONG ConnectToCharToItem( HWND hWnd, WORD Key );
|
|
|
|
VOID ConnectToSysColorChange( );
|
|
|
|
VOID ConnectToDestroy( HWND hWnd );
|
|
|
|
VOID ConnectToSelectLbSelChange( HWND hWnd );
|
|
|
|
VOID ConnectToSelectLbDblClk( HWND hwnd, HWND hwndListbox );
|
|
|
|
VOID ConnectToMouseMove( HWND hWnd, LONG x, LONG y );
|
|
|
|
BOOL ConnectToSetCursor( HWND hWnd );
|
|
|
|
VOID ConnectToEnumObjectsComplete( HWND hWnd, PCONNECTTO_OBJECT pConnectToObject );
|
|
|
|
VOID ConnectToGetPrinterComplete( HWND hWnd, LPTSTR pPrinterName,
|
|
PPRINTER_INFO_2 pPrinter, DWORD Error );
|
|
|
|
BOOL ConnectToOK( HWND hWnd, BOOL ForceClose );
|
|
BOOL ConnectToCancel( HWND hWnd );
|
|
VOID SetCursorShape( HWND hWnd );
|
|
|
|
BOOL
|
|
PrinterExists(
|
|
IN HANDLE hPrinter,
|
|
OUT PDWORD pAttributes,
|
|
OUT LPWSTR *ppszDriver,
|
|
OUT LPWSTR *ppszPrinterName
|
|
);
|
|
|
|
HANDLE
|
|
CreateLocalPrinter(
|
|
IN LPCTSTR pPrinterName,
|
|
IN LPCTSTR pDriverName,
|
|
IN LPCTSTR pPortName,
|
|
IN BOOL bMasqPrinter,
|
|
IN DEVMODE *pDevMode OPTIONAL
|
|
);
|
|
|
|
BOOL
|
|
AddKnownDriver(
|
|
IN SPLSETUP_DATA *pSplSetupData,
|
|
IN HWND hwnd,
|
|
IN LPWSTR pszDriver,
|
|
IN BOOL bSamePlatform
|
|
);
|
|
|
|
BOOL
|
|
AddDriver(
|
|
IN SPLSETUP_DATA *pSplSetupData,
|
|
IN HWND hwnd,
|
|
IN LPWSTR pszDriver,
|
|
IN BOOL bPromptUser,
|
|
OUT LPWSTR *ppszDriverOut
|
|
);
|
|
|
|
PCONNECTTO_OBJECT
|
|
GetConnectToObject(
|
|
IN PCONNECTTO_OBJECT pFirstConnectToObject,
|
|
IN DWORD cThisLevelObjects,
|
|
IN DWORD Index,
|
|
IN PCONNECTTO_OBJECT pFindObject,
|
|
OUT PDWORD pObjectsFound,
|
|
OUT PDWORD pDepth
|
|
);
|
|
|
|
PCONNECTTO_OBJECT
|
|
GetDefaultExpand(
|
|
IN PCONNECTTO_OBJECT pFirstConnectToObject,
|
|
IN DWORD cThisLevelObjects,
|
|
OUT PDWORD pIndex
|
|
);
|
|
|
|
BOOL
|
|
ToggleExpandConnectToObject(
|
|
HWND hwnd,
|
|
PCONNECTTO_OBJECT pConnectToObject
|
|
);
|
|
|
|
BOOL
|
|
UpdateList(
|
|
HWND hwnd,
|
|
INT Increment
|
|
);
|
|
|
|
LPBYTE
|
|
GetPrinterInfo(
|
|
IN DWORD Flags,
|
|
IN LPTSTR Name,
|
|
IN DWORD Level,
|
|
IN LPBYTE pPrinters,
|
|
OUT LPDWORD pcbPrinters,
|
|
OUT LPDWORD pcReturned,
|
|
OUT LPDWORD pcbNeeded OPTIONAL,
|
|
OUT LPDWORD pError OPTIONAL
|
|
);
|
|
|
|
BOOL
|
|
SetInfoFields(
|
|
HWND hWnd,
|
|
LPPRINTER_INFO_2 pPrinter
|
|
);
|
|
|
|
VOID DrawLine( HDC hDC, LPRECT pRect, LPTSTR pStr, BOOL bInvert );
|
|
VOID DrawLineWithTabs( HDC hDC, LPRECT pRect, LPTSTR pStr, BOOL bInvert );
|
|
BOOL DisplayStatusIcon( HDC hdc, PRECT prect, int xBase, int yBase, BOOL Highlight );
|
|
BOOL LoadBitmaps();
|
|
BOOL FixupBitmapColours( );
|
|
VOID FreeBitmaps();
|
|
BOOL GetRegShowLogonDomainFlag( );
|
|
BOOL SetRegShowLogonDomainFlag( BOOL ShowLogonDomain );
|
|
|
|
VOID
|
|
UpdateError(
|
|
HWND hwnd,
|
|
DWORD Error
|
|
);
|
|
|
|
INT_PTR
|
|
CALLBACK
|
|
ConnectToDlg(
|
|
HWND hWnd,
|
|
UINT usMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
);
|
|
|
|
/******************************************************
|
|
* *
|
|
* Browse for printer property page stuff *
|
|
* *
|
|
******************************************************/
|
|
|
|
//
|
|
// The dialog procedure for the property page created above
|
|
//
|
|
INT_PTR
|
|
CALLBACK
|
|
ConnectToPropertyPage(
|
|
IN HWND hWnd,
|
|
IN UINT usMsg,
|
|
IN WPARAM wParam,
|
|
IN LPARAM lParam
|
|
);
|
|
|
|
//
|
|
// Handle wizard back notification
|
|
//
|
|
BOOL
|
|
PropertyPageWizardBack(
|
|
IN HWND hWnd
|
|
);
|
|
|
|
//
|
|
// Handle successful printer connection page
|
|
//
|
|
BOOL
|
|
HandleSuccessfulPrinterConnection(
|
|
IN HWND hWnd,
|
|
IN PBROWSE_DLG_DATA pBrowseDlgData
|
|
);
|
|
|
|
LPWSTR
|
|
GetArch(
|
|
IN HANDLE hServer
|
|
);
|
|
|
|
HANDLE
|
|
CreateRedirectedPrinter(
|
|
IN PCWSTR pszPrinterIn
|
|
);
|
|
|
|
VOID
|
|
BuildMasqPrinterName(
|
|
IN PPRINTER_INFO_2 pPrinter,
|
|
OUT PWSTR *ppszPrinterName
|
|
);
|
|
|
|
BOOL
|
|
BuildNTPrinterName(
|
|
IN PRINTER_INFO_2 *pPrinter,
|
|
OUT PWSTR *ppszPrinterName
|
|
);
|
|
|
|
HRESULT
|
|
IsNTServer(
|
|
IN PCWSTR pszServerName
|
|
);
|
|
|
|
BOOL
|
|
CreateLocalPort(
|
|
IN PCWSTR pszPortName
|
|
);
|
|
|
|
BOOL
|
|
AddPrinterConnectionAndPrompt(
|
|
IN HWND hWnd,
|
|
IN PCWSTR pszPrinterName,
|
|
OUT BOOL *pbUserDenied,
|
|
OUT TString *pstrNewName
|
|
);
|
|
|
|
#endif // _BROWSE_HXX_
|