NT4/private/windows/spooler/spoolss/client/browse.h
2020-09-30 17:12:29 +02:00

447 lines
13 KiB
C

/*++
Copyright (c) 1990-1994 Microsoft Corporation
Module Name:
local.h
Abstract:
Header file for Local Print Providor
Author:
Dave Snipp (DaveSn) 15-Mar-1991
Revision History:
--*/
#define BMP_BROWSE 100
#define DLG_CONNECTTO 400
#define IDD_BROWSE_PRINTER 401
#define IDD_BROWSE_SELECT_LB 402
#define IDD_BROWSE_HELP 403
#define IDD_BROWSE_DESCRIPTION_TX 404
#define IDD_BROWSE_DESCRIPTION 405
#define IDD_BROWSE_STATUS_TX 406
#define IDD_BROWSE_STATUS 407
#define IDD_BROWSE_DOCUMENTS_TX 408
#define IDD_BROWSE_DOCUMENTS 409
#define IDD_BROWSE_ERROR 410
#define IDD_BROWSE_DEFAULTEXPAND 411
#define DLG_INSTALLDRIVER 300
#define IDD_INSTDRV_PRINTER 301
#define IDD_INSTDRV_DRIVER 302
#define IDD_INSTDRV_PRINTTO 303
#define IDD_INSTDRV_HELP 304
#define DLG_NETWORK_PASSWORD 500
#define IDD_ENTER_PASSWORD_TEXT 501
#define IDD_NETWORK_PASSWORD_SLE 502
#define IDD_NETWORK_PASSWORD_HELP 503
#define IDS_CONNECTTOPRINTER 600
#define IDS_MESSAGE_TITLE IDS_CONNECTTOPRINTER
#define IDS_COULDNOTCONNECTTOPRINTER 601
#define IDS_PAUSED 602
#define IDS_ERROR 603
#define IDS_PENDING_DELETION 604
#define IDS_READY 605
#define IDS_UNKNOWN 606
#define IDS_COULDNOTSHOWHELP 607
#define IDS_INSUFFPRIV_CREATEPRINTER 608
#define IDS_MUSTSUPPLYVALIDNAME 609
#define IDS_INSTALLDRIVER 610
#define IDS_ERRORRUNNINGSPLSETUP 611
#define IDS_CANNOTOPENPRINTER 612
#define IDS_CONFIRMINSTALLDRIVER 613
#define IDS_UNKNOWN_ERROR 614
#define IDS_CANNOT_COPY_DRIVER_FILES 615
#define IDS_ERROR_VALIDATING_ACCESS 616
#define IDS_WORKING 617
#define IDS_COULD_NOT_LOAD_NETAPI32 618
#define IDS_COULD_NOT_GET_PROC_ADDRESS 619
#define IDS_CONNECTION_ALREADY_EXISTS 620
#define IDS_PRINTER_IS_LOCAL 621
#define IDS_CONFIRMINSTALLKNOWNDRIVER 622
#define IDS_PROMPTFORINF 623
#define PRINTER_STATUS_UNKNOWN 8000
/* IDs passed to WinHelp:
*/
#define IDH_300_301 8907668 // Select Driver: "" (Edit)
#define IDH_300_302 8907686 // Select Driver: "" (ComboBox)
#define IDH_300_303 8907704 // Select Driver: "" (Static)
#define IDH_400_401 8910218 // Connect to Printer: "" (Edit)
#define IDH_400_402 8910236 // Connect to Printer: "" (ListBox)
#define IDH_500_501 8912768 // Enter Network Password: "Enter password for %s:" (Static)
#define IDH_500_502 8912786 // Enter Network Password: "" (Edit)
#define IDH_800_801 8920418 // Print to File: "" (Edit)
#define IDH_400_411 8910398 // Connect to Printer: "&Expand by Default" (Button)
#define ID_HELP_CONNECTTO IDH_400_401
#define ID_HELP_INSTALLDRIVER IDH_300_301
#define ID_HELP_NETWORK_PASSWORD IDH_500_501
/* Space for 21x16 status bitmaps:
*/
#define STATUS_BITMAP_WIDTH 21
#define STATUS_BITMAP_HEIGHT 16
//#ifdef JAPAN
#define STATUS_LINE_HEIGHT STATUS_BITMAP_HEIGHT + 2
// #endif
#define STATUS_BITMAP_MARGIN 4 /* (either side) */
#define STATUS_BITMAP_SPACE ( STATUS_BITMAP_WIDTH + ( 2 * STATUS_BITMAP_MARGIN ) )
#define BM_IND_CONNECTTO_DOMPLUS 0
#define BM_IND_CONNECTTO_DOMEXPAND ( 2 * STATUS_BITMAP_HEIGHT )
#define MSG_ERROR MB_OK | MB_ICONSTOP
#define MSG_WARNING MB_OK | MB_ICONEXCLAMATION
#define MSG_INFORMATION MB_OK | MB_ICONINFORMATION
#define MSG_YESNO MB_YESNO | MB_ICONQUESTION
#define MSG_CONFIRMATION MB_OKCANCEL | MB_ICONEXCLAMATION
#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_USER+0x10
#define WM_GET_PRINTER_COMPLETE WM_USER+0x11
#define WM_GET_PRINTER_ERROR WM_USER+0x12
#define WM_QUIT_BROWSE WM_USER+0x14
#define ZERO_OUT( pStructure ) memset( (pStructure), 0, sizeof( *(pStructure) ) )
#define GET_BROWSE_DLG_DATA( hwnd ) (PBROWSE_DLG_DATA)GetWindowLong( hwnd, GWL_USERDATA )
#define SET_BROWSE_DLG_DATA( hwnd, pBrowseDlgData ) SetWindowLong( hwnd, GWL_USERDATA, (LONG)pBrowseDlgData )
#define GET_CONNECTTO_DATA( hwnd ) (GET_BROWSE_DLG_DATA( hwnd ))->pConnectToData
#define SETDLGITEMFONT(hwnd, id, hfont) \
SendDlgItemMessage(hwnd, id, WM_SETFONT, (WPARAM)hfont, 0L)
#define ADDCOMBOSTRING(hwnd, id, string) \
SendDlgItemMessage(hwnd, id, CB_ADDSTRING, 0, (LONG)string)
#define INSERTCOMBOSTRING(hwnd, id, i, string) \
SendDlgItemMessage(hwnd, id, CB_INSERTSTRING, i, (LONG)string)
#define SETCOMBOSELECT(hwnd, id, i) \
SendDlgItemMessage(hwnd, id, CB_SETCURSEL, (WPARAM)i, 0L)
#define GETCOMBOSELECT(hwnd, id) \
SendDlgItemMessage(hwnd, id, CB_GETCURSEL, 0, 0L)
#define GETCOMBOTEXT(hwnd, id, i, string) \
SendDlgItemMessage(hwnd, id, CB_GETLBTEXT, (WPARAM)i, (LONG)string)
#define SETLISTCOUNT(hwnd, Count) \
SendDlgItemMessage(hwnd, IDD_BROWSE_SELECT_LB, LB_SETCOUNT, Count, 0)
#define GETLISTCOUNT(hwnd) \
SendDlgItemMessage(hwnd, IDD_BROWSE_SELECT_LB, LB_GETCOUNT, 0, 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 ) \
EnterCriticalSection( &(pBrowseDlgData)->CriticalSection )
#define LEAVE_CRITICAL( pBrowseDlgData ) \
LeaveCriticalSection( &(pBrowseDlgData)->CriticalSection )
#if DBG
#define DBG_IN_CRITICAL( pBrowseDlgData ) DbgInCritical( &(pBrowseDlgData)->CriticalSection )
#define DBG_OUT_CRITICAL( pBrowseDlgData ) DbgOutCritical( &(pBrowseDlgData)->CriticalSection )
#else /* NOT DBG */
#define DBG_IN_CRITICAL( pBrowseDlgData )
#define DBG_OUT_CRITICAL( pBrowseDlgData )
#endif /* DBG */
/* 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) \
DBG_IN_CRITICAL( pBrowseDlgData ), \
(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 )
extern HANDLE hInst;
extern BOOL Loaded;
extern HFONT hfontHelv;
extern HCURSOR hcursorArrow;
extern HCURSOR hcursorWait;
extern TCHAR szPrintingHlp[];
extern UINT WM_Help;
extern HMODULE hmoduleMpr;
extern FARPROC pfnWNetAddConnection2;
extern FARPROC pfnWNetCancelConnection2;
extern FARPROC pfnWNetOpenEnum;
extern FARPROC pfnWNetEnumResource;
extern FARPROC pfnWNetCloseEnum;
DWORD RemoveFromReconnectList(LPTSTR pszRemotePath) ;
DWORD AddToReconnectList(LPTSTR pszRemotePath) ;
typedef struct _PACK_WL_PARAMS
{
DWORD wParam;
DWORD lParam;
} PACK_WL_PARAMS, *PPACK_WL_PARAMS;
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;
typedef struct _BROWSE_DLG_DATA
{
/* These fields are referenced only by the main thread:
*/
PHANDLE phPrinter;
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 */
DWORD wParam;
DWORD lParam;
/* This is for printer info, and will be freed by the browse thread:
*/
LPPRINTER_INFO_2 pPrinterInfo;
DWORD cbPrinterInfo;
CRITICAL_SECTION CriticalSection;
} BROWSE_DLG_DATA, *PBROWSE_DLG_DATA;
#define BROWSE_STATUS_INITIAL 0x00000001
#define BROWSE_STATUS_EXPAND 0x00000002
/* SETUP_DATA
*
* This is allocated in a linked list in the Printer Properties dialog
* for installable printer drivers read in from the PRINTER.INI file.
* Only those which are not already installed are recorded in this way.
*/
typedef struct _SETUP_DATA
{
PTCHAR pOption;
// PTCHAR pOptionText;
struct _SETUP_DATA *pNext;
} SETUP_DATA, *PSETUP_DATA;
typedef struct _PRT_PROP_DRIVER
{
PTCHAR pName;
BOOL Installed;
DWORD Index; /* of LPPRINTER_INFO_2 if Installed, */
} PRT_PROP_DRIVERS, *PPRT_PROP_DRIVER; /* otherwise PSETUP_DATA */
int Message( HWND hwnd, DWORD Type, int CaptionID, int TextID, ... );
DWORD EnumConnectToObjects( PBROWSE_DLG_DATA pBrowseDlgData );
DWORD FreeConnectToObjects(
IN PCONNECTTO_OBJECT pFirstConnectToObject,
IN DWORD cThisLevelObjects,
IN DWORD cbPrinterInfo );
VOID BrowseThread( PBROWSE_DLG_DATA pBrowseDlgData );
VOID ShowHelp( HWND hWnd, UINT Type, DWORD Data );
#if DBG
VOID
DbgInCritical(
PCRITICAL_SECTION pCriticalSection
);
VOID
DbgOutCritical(
PCRITICAL_SECTION pCriticalSection
);
#endif /* DBG */
BOOL APIENTRY
InstallDriverDialog(
HWND hWnd,
UINT usMsg,
WPARAM wParam,
LONG lParam
);
BOOL APIENTRY
NetworkPasswordDialog(
HWND hWnd,
UINT usMsg,
WPARAM wParam,
LONG lParam
);
LPVOID
ReallocSplMem(
LPVOID pOldMem,
DWORD cbOld,
DWORD cbNew
);
LPTSTR
AllocSplStr(
LPTSTR pStr
);
BOOL
ReallocSplStr(
LPTSTR *ppStr,
LPTSTR pStr
);
BOOL
EnumGeneric(
IN PROC fnEnum,
IN DWORD Level,
IN PBYTE *ppEnumData,
IN DWORD cbBuf,
OUT LPDWORD pcbReturned,
OUT LPDWORD pcReturned,
IN PVOID Arg1,
IN PVOID Arg2,
IN PVOID Arg3 );
BOOL
GetGeneric(
IN PROC fnGet,
IN DWORD Level,
IN PBYTE *ppGetData,
IN DWORD cbBuf,
OUT LPDWORD pcbReturned,
IN PVOID Arg1,
IN PVOID Arg2 );
LPTSTR AllocDlgItemText(HWND hwnd, int id);
LPTSTR
GetErrorString(
DWORD Error
);
DWORD ReportFailure( HWND hwndParent,
DWORD idTitle,
DWORD idDefaultError );
BOOL
IsJapan();
#define IDS_LOCALMONITOR 900
#define IDS_COULD_NOT_OPEN_FILE 904
#define IDS_OVERWRITE_EXISTING_FILE 906
#define DLG_PRINTTOFILE 800
#define IDD_PF_EF_OUTPUTFILENAME 801
#define IDD_PF_PB_HELP 802
BOOL APIENTRY
PrintToFileDlg(
HWND hwnd,
WORD msg,
WPARAM wparam,
LONG lparam
);
HANDLE
AddPrinterConnectionUI(
HWND hwnd,
LPTSTR pszPrinter,
PBOOL pbAdded
);