Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

404 lines
10 KiB

/*++
Copyright (C) Microsoft Corporation, 1996 - 1999
All rights reserved.
Module Name:
rundll.cxx
Abstract:
Run dll entry interface for lauching printer related
UI from shell extenstion and other shell related components.
Author:
Steve Kiraly (SteveKi) 29-Sept-1996
Revision History:
--*/
#ifndef _RUNDLL_HXX
#define _RUNDLL_HXX
/********************************************************************
Printer commnad types.
********************************************************************/
enum {
kProperties, // Printer properties
kWin32QueueView, // Printer queue view
kInstallNetPrinter, // Install connection to network printer
kDeleteNetPrinter, // Delete printer connection
kInstallLocalPrinter, // Install printer wizard
kInstallPrinterWithInf, // Install printer using an inf file
kDeleteLocalPrinter, // Delete printer wizard
kServerProperties, // Print server properties
kDocumentDefaults, // Document defaults
kInstallPrinterDriver, // Install printer driver
kInstallLocalPrinterWithInf, // Install printer wizard
kAddPerMachineConnection, // Add per machine printer connection
kDeletePerMachineConnection, // Delete per machine printer connection
kEnumPerMachineConnections, // Enumerate per machine printer connection
kInstallDriverWithInf, // Instal printer driver with inf
kDeletePrinterDriver, // Delete printer driver
kSetAsDefault, // Set printer as the default printer
kPrintTestPage, // Print the test page
kPrinterGetSettings, // Get printer settings, comment, location, port etc.
kPrinterSetSettings, // Set printer settings, comment, location, port etc.
kCommandHelp, // Command specific help
kPrinterPersist, // Persist printer settings into file
kPrinterRestore, // Restore printer settings from file
kUnknown // Unknown command type
};
enum {
kMsgUnknownType, // The message type is unknown
kMsgConfirmation, // The message type is question (MB_ICONQUESTION)
kMsgWarning, // The message type is warning (MB_ICONEXCLAMATION)
};
struct AFlags {
UINT IsQuiet:1; // Quiet flag
UINT IsSupressSetupUI:1; // Super quiet flag (supress setup warnings UI)
UINT IsWebPointAndPrint:1; // Used for web point and print
UINT IsNoSharing:1; // Is not to be shared
UINT IsUseExistingDriver:1; // Use exsiting driver if installed when adding a printer
UINT IsUnknownDriverPrompt:1; // Prompt if driver is not known
UINT IsPromptForNeededFiles:1; // Prompt if files are needed
UINT IsHydraSpecific:1; // Hydra specific flag
UINT IsShared:1; // Caller wants the printer shared
UINT IsWindowsUpdate:1; // Windows Update case, we need to ignore ths INF file.
UINT IsDontAutoGenerateName:1; // Don't auto generate a mangled printer name
UINT IsUseNonLocalizedStrings:1; // Use non localized strings Environment and Version
UINT IsWizardRestartable:1; // Is the wizard (APW & APDW) restartable from the last page
};
struct AParams {
AFlags Flags; // Flags
INT dwSheet; // Property sheet to start on
LPTSTR pPrinterName; // Printer or server name
LPTSTR pPortName; // Port name
LPTSTR pModelName; // Printer model name
LPTSTR pInfFileName; // INF path and file name
LPTSTR pBasePrinterName; // INF install base printer name
DWORD dwLastError; // Last error of command
LPTSTR pMachineName; // Machine to act on
LPTSTR pSourcePath; // Driver sources path inf installation
LPCTSTR pszCmdLine; // Original command line passed to rundll32.exe
LPTSTR pBinFileName; // Binary file holds devmode & printer data
LPTSTR pProvider; // Name of the Print Provider
LPTSTR pVersion; // Driver version
LPTSTR pArchitecture; // Driver architecture
LPTSTR pAttribute; // Print queue attribute name
LPTSTR pMsgConfirm; // Message confirmation text
UINT uMsgType; // Message type (can be question or warning)
UINT ac; // Remaining argument count
LPTSTR *av; // Remaining arguments
};
/********************************************************************
Run DLL command interface. Note the W appended to this function
is neccessary to indicate to rundll32.exe that this interface
accepts unicode characters only.
rundll32.exe commands are of the form.
rundll32 DLL,FunctionName Args
Args is text string just like any command line argument.
Example:
rundll32 printui.dll,PrintUIEntry /o /d \\steveki1\test_printer
This command will load the printui.dll library and call the
function PrintUIEntryW with the following command line arguments.
"/o /d \\steveki1\test_printer"
In this example a queue for \\steveki1\test_printer will be
opened and displayed.
Note: All arguments are case sensitive.
See the function PrintUIEntryW for command specific information.
********************************************************************/
DWORD
PrintUIEntryW(
IN HWND hwnd,
IN HINSTANCE hInstance,
IN LPCTSTR pszCmdLine,
IN UINT nCmdShow
);
BOOL
bValidateCommand(
IN INT iFunction,
IN AParams *pParams
);
BOOL
bExecuteCommand(
IN HWND hwnd,
IN INT iFunction,
IN AParams *Params
);
BOOL
bDoCommand(
IN HWND hwnd,
IN INT ac,
IN LPTSTR *av,
IN AParams *pParams
);
BOOL
bDoInfPrinterInstall(
IN AParams *pParams
);
BOOL
bDoInfDriverInstall(
IN AParams *pParams
);
VOID
vUsage(
IN AParams *pParams
);
BOOL
bDoPersistPrinterSettings(
IN INT iFunction,
IN AParams *pParams
);
BOOL
bDoWebPnpPreInstall(
IN AParams *pParams
);
BOOL
bDoDriverRemoval(
IN AParams *pParams
);
BOOL
bDoGetPrintSettings(
IN AParams *pParams
);
BOOL
bDoSetPrintSettings(
IN AParams *pParams
);
BOOL
PrintSettings_ValidateArguments(
IN AParams *pParams
);
BOOL
PrintSettings_SetInfo(
IN AParams *pParams,
IN PRINTER_INFO_2 &Info
);
BOOL
PrintSettings_DisplayHelp(
IN AParams *pParams,
IN TSelect::Selection *pSelection
);
BOOL
PrintSettings_DisplayInformation(
IN AParams *pParams,
IN TSelect::Selection *pSelection
);
BOOL
PrintSettings_DisplayAttributes(
IN TString &strBit,
IN TSelect::Selection *pSelection,
IN UINT uAttributes
);
BOOL
PrintSettings_DisplayStatus(
IN TString &strVal,
IN TSelect::Selection *pSelection,
IN UINT uStatus
);
/********************************************************************
Very simple file output class.
********************************************************************/
class TFile {
public:
enum FilePrefix {
kUnicodePrefix = 0xFEFF
};
TFile(
IN LPCTSTR pszFileName,
IN BOOL bNoUnicodeByteMark = FALSE
);
~TFile(
VOID
);
BOOL
bValid(
VOID
);
BOOL
bWrite(
IN TString &strString,
OUT UINT *pBytesWritten = NULL
);
BOOL
bWrite(
IN UINT uSize,
IN LPBYTE pData,
OUT UINT *pBytesWritten = NULL
);
private:
//
// Assignment and copying are not defined
//
TFile &
operator =(
const TFile &
);
TFile(
const TFile &
);
HANDLE _hFile;
TString _strFileName;
BOOL _bValid;
};
/********************************************************************
RunDllDisplay
********************************************************************/
class TRunDllDisplay : public MGenericDialog {
public:
enum DisplayType {
kEditBox,
kFile,
};
TRunDllDisplay(
IN HWND hWnd,
IN LPCTSTR pszFileName = NULL,
IN DisplayType Display = kEditBox
);
~TRunDllDisplay(
VOID
);
BOOL
bValid(
VOID
);
BOOL
bDoModal(
VOID
);
BOOL
WriteOut(
LPCTSTR pszData
);
BOOL
SetTitle(
LPCTSTR pszData
);
VOID
vSetTabStops(
IN UINT uTabStop
);
private:
//
// Assignment and copying are not defined
//
TRunDllDisplay &
operator =(
const TRunDllDisplay &
);
TRunDllDisplay(
const TRunDllDisplay &
);
BOOL
bSetUI(
VOID
);
BOOL
bHandle_WM_SIZE(
IN WPARAM wParam,
IN LPARAM lParam
);
BOOL
bHandle_WM_GETMINMAXINFO(
IN WPARAM wParam,
IN LPARAM lParam
);
BOOL
bHandleMessage(
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam
);
HWND _hWnd;
BOOL _bValid;
DisplayType _Display;
TString _StringOutput;
TString _StringTitle;
TFile *_pFile;
POINT _ptLastSize;
POINT _ptMinTrack;
INT _cxGrip;
INT _cyGrip;
HWND _hwndGrip;
UINT _cTabStop;
DWORD _dwTabStop;
};
#endif