windows-nt/Source/XPSP1/NT/enduser/windows.com/iuengine/cdmp.h

118 lines
3.8 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
//=======================================================================
//
// Copyright (c) 1998-2001 Microsoft Corporation. All Rights Reserved.
//
// File: cdmp.h
//
//
// Description:
//
// CDM internal header
//
//=======================================================================
#ifndef _CDMP_H
#define _CDMP_H
#include <winspool.h>
#include <winsprlp.h> // private header containing EPD_ALL_LOCAL_AND_CLUSTER define
#include <winnt.h>
#include <iuxml.h>
#if defined(__cplusplus)
extern "C" {
#endif
#define MAX_INDEX_TO_SEARCH 100 //range to find unique file names for hardware_XXX.xml
//
// Unicode text files require a magic header (first byte of file must be 0xFF and second 0xFE).
//
const BYTE UNICODEHDR[] = { 0xFF, 0xFE };
class CDeviceInstanceIdArray
{
public:
CDeviceInstanceIdArray();
~CDeviceInstanceIdArray();
int Add(LPCWSTR pszDIID);
LPWSTR operator[](int index);
int Size() { return m_nCount; }
void FreeAll();
private:
LPWSTR* m_ppszDIID;
int m_nCount;
int m_nPointers;
};
//
// Used to control functionality of GetPackage() : NOTE that pBstrCatalog is always
// allocated and returned unless function fails.
//
typedef enum { GET_PRINTER_INFS, // writes generated printer INF's to path returned in lpDownloadPath
DOWNLOAD_DRIVER, // downloads driver to path returned in lpDownloadPath
GET_CATALOG_XML // returns catalog BSTR only - no download or INF created
} ENUM_GETPKG;
HRESULT GetPackage( ENUM_GETPKG eFunction,
PDOWNLOADINFO pDownloadInfo,
LPTSTR lpDownloadPath,
DWORD cchDownloadPath,
BSTR* pbstrXmlCatalog); // must be freed by caller if allocated
// called by DownloadUpdatedFiles()
HRESULT GetDownloadPath(BSTR bstrXmlItems, LPTSTR szPath);
HRESULT OpenUniqueProviderInfName(
IN LPCTSTR szDirPath,
IN LPCTSTR pszProvider,
IN OUT LPTSTR pszFilePath,
IN DWORD cchFilePath,
OUT HANDLE &hFile);
HRESULT WriteInfHeader(LPCTSTR pszProvider, HANDLE& hFile);
HRESULT PruneAndBuildPrinterINFs(BSTR bstrXmlPrinterCatalog, LPTSTR lpDownloadPath, DRIVER_INFO_6* paDriverInfo6, DWORD dwDriverInfoCount);
HRESULT GetInstalledPrinterDriverInfo(const OSVERSIONINFO* pOsVersionInfo, DRIVER_INFO_6** ppaDriverInfo6, DWORD* pdwDriverInfoCount);
//
// Located in sysspec.cpp, but used in cdmp.cpp and sysspec.cpp
//
HRESULT AddPrunedDevRegProps(HDEVINFO hDevInfoSet,
PSP_DEVINFO_DATA pDevInfoData,
CXmlSystemSpec& xmlSpec,
LPTSTR pszMatchingID, // pszMatchingID and pszDriverVer should be NULL or
LPTSTR pszDriverVer, // point to valid strings
DRIVER_INFO_6* paDriverInfo6, // OK if this is NULL (no installed printer drivers)
DWORD dwDriverInfoCount,
BOOL fIsSysSpecCall); // Called by GetSystemSpec and GetPackage, with slightly different behavior
HRESULT GetMultiSzDevRegProp(HDEVINFO hDevInfoSet, PSP_DEVINFO_DATA pDevInfoData, DWORD dwProperty, LPTSTR* ppMultiSZ);
HRESULT DoesHwidMatchPrinter(
DRIVER_INFO_6* paDriverInfo6, // array of DRIVER_INFO_6 structs for installed printer drivers
DWORD dwDriverInfoCount, // count of structs in paDriverInfo6 array
LPCTSTR pszMultiSZ, // Hardware or Compatible MultiSZ to compare with installed drivers
BOOL* pfHwidMatchesInstalledPrinter // [OUT] set TRUE if we match an installed printer driver
);
HRESULT AddIDToXml(LPCTSTR pszMultiSZ, CXmlSystemSpec& xmlSpec, DWORD dwProperty,
DWORD& dwRank, HANDLE_NODE& hDevices, LPCTSTR pszMatchingID, LPCTSTR pszDriverVer);
HRESULT GetMatchingDeviceID(HDEVINFO hDevInfoSet, PSP_DEVINFO_DATA pDevInfoData, LPTSTR* ppszMatchingID, LPTSTR* ppszDriverVer);
//called by InternalLogDriverNotFound()
HRESULT OpenUniqueFileName(
IN LPTSTR lpBuffer,
IN DWORD cchBuffer,
OUT HANDLE &hFile
);
#if defined(__cplusplus)
} // end extern "C"
#endif
#endif