291 lines
6.1 KiB
C
291 lines
6.1 KiB
C
|
#ifndef _PRIV_H_
|
||
|
#define _PRIV_H_
|
||
|
|
||
|
#define STRICT
|
||
|
|
||
|
/* disable "non-standard extension" warnings in our code
|
||
|
*/
|
||
|
#ifndef RC_INVOKED
|
||
|
#pragma warning(disable:4001)
|
||
|
#endif
|
||
|
|
||
|
// Define these before including dldecl.h
|
||
|
#define DL_OLEAUT32
|
||
|
#define DL_OLE32
|
||
|
|
||
|
#include "dldecl.h" // dldecl.h needs to go before everything else
|
||
|
|
||
|
#define CC_INTERNAL // This is for some internal prshtp.h stuff
|
||
|
|
||
|
|
||
|
#ifndef WINNT
|
||
|
#undef ShellMessageBoxA
|
||
|
#define ShellMessageBoxA ShellMessageBox
|
||
|
|
||
|
#undef SHGetNewLinkInfo
|
||
|
#define SHGetNewLinkInfoA SHGetNewLinkInfo
|
||
|
#endif
|
||
|
|
||
|
|
||
|
// copied from old
|
||
|
#ifdef WINNT
|
||
|
//
|
||
|
// need Wx86 definitions from ntpsapi.h
|
||
|
//
|
||
|
#include <nt.h>
|
||
|
#include <ntrtl.h>
|
||
|
#include <nturtl.h>
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#include <windows.h>
|
||
|
|
||
|
// VariantInit is a trivial function -- avoid using OleAut32, use intrinsic
|
||
|
// version of memset for a good size win
|
||
|
// (it's here so that atl (in stdafx.h) gets it too)
|
||
|
#define VariantInit(p) memset(p, 0, sizeof(*(p)))
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
// (stdafx.h must come before windowsx.h)
|
||
|
#include "stdafx.h" // ATL header file for this component
|
||
|
#endif
|
||
|
|
||
|
#include <windowsx.h>
|
||
|
#include <ole2.h> // to get IStream for image.c
|
||
|
#include "..\inc\port32.h"
|
||
|
#include <winerror.h>
|
||
|
#include <winnlsp.h>
|
||
|
#include <docobj.h>
|
||
|
#include <lm.h>
|
||
|
#include <shlobj.h>
|
||
|
|
||
|
#define _SHLWAPI_
|
||
|
#include <shlwapi.h>
|
||
|
|
||
|
#include <ccstock.h>
|
||
|
#include <crtfree.h>
|
||
|
#define DISALLOW_Assert
|
||
|
#include <debug.h>
|
||
|
#include <regstr.h>
|
||
|
#define _WIN32_MSI 110
|
||
|
#include <msi.h> // Darwin APIs
|
||
|
#include <msiquery.h> // Darwin Datebase Query APIs
|
||
|
#include <wininet.h> // For INTERNET_MAX_URL_LENGTH
|
||
|
|
||
|
#include "shappmgrp.h"
|
||
|
#include "shellp.h"
|
||
|
|
||
|
#include <appmgmt.h>
|
||
|
#include "apithk.h"
|
||
|
#include "awthunk.h"
|
||
|
|
||
|
#include <uxtheme.h>
|
||
|
|
||
|
|
||
|
#include <shfusion.h>
|
||
|
|
||
|
//
|
||
|
// Local includes
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// Wrappers so our Unicode calls work on Win95
|
||
|
//
|
||
|
|
||
|
#ifdef WINNT
|
||
|
|
||
|
#define StrCmpIW lstrcmpiW
|
||
|
|
||
|
#else
|
||
|
|
||
|
#define lstrcmpW StrCmpW
|
||
|
#define lstrcmpiW StrCmpIW
|
||
|
#define lstrcatW StrCatW
|
||
|
#define lstrcpyW StrCpyW
|
||
|
#define lstrcpynW StrCpyNW
|
||
|
|
||
|
#endif
|
||
|
|
||
|
// This DLL needs to run correctly on Win95. CharNextW is only stubbed
|
||
|
// on Win95, so we need to do this...
|
||
|
#define CharNextW(x) ((x) + 1)
|
||
|
#define CharPrevW(y, x) ((x) - 1)
|
||
|
|
||
|
// This is a TCHAR export on win9x and NT4, and since we need to link to
|
||
|
// the old shell32.nt4/shell32.w95 we #undef it here
|
||
|
#undef ILCreateFromPath
|
||
|
STDAPI_(LPITEMIDLIST) ILCreateFromPath(LPCTSTR pszPath);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Trace/dump/break flags specific to shell32.
|
||
|
// (Standard flags defined in debug.h)
|
||
|
//
|
||
|
|
||
|
// Trace flags
|
||
|
#define TF_OBJLIFE 0x00000010 // Object lifetime
|
||
|
#define TF_DSO 0x00000020 // Data source object
|
||
|
#define TF_FINDAPP 0x00000040 // Find app heuristic stuff
|
||
|
#define TF_INSTAPP 0x00000080
|
||
|
#define TF_SLOWFIND 0x00000100
|
||
|
#define TF_TASKS 0x00000200
|
||
|
#define TF_CTL 0x00000400
|
||
|
#define TF_VERBOSEDSO 0x00000800 // squirts html and stuff
|
||
|
|
||
|
// Break flags
|
||
|
#define BF_ONDLLLOAD 0x00000010
|
||
|
|
||
|
|
||
|
// Prototype flags
|
||
|
#define PF_NEWADDREMOVE 0x00000001
|
||
|
#define PF_NOSECURITYCHECK 0x00000002
|
||
|
#define PF_FAKEUNINSTALL 0x00000004
|
||
|
|
||
|
// Debug functions
|
||
|
#ifdef DEBUG
|
||
|
#define TraceAddRef(classname, cref) TraceMsg(TF_OBJLIFE, #classname "(%#08lx) %d>", (DWORD_PTR)this, cref)
|
||
|
#define TraceRelease(classname, cref) TraceMsg(TF_OBJLIFE, #classname "(%#08lx) %d<", (DWORD_PTR)this, cref)
|
||
|
#else
|
||
|
#define TraceAddRef(classname, cref)
|
||
|
#define TraceRelease(classname, cref)
|
||
|
#endif
|
||
|
|
||
|
#define MAX_URL_STRING INTERNET_MAX_URL_LENGTH
|
||
|
|
||
|
#define RECTWIDTH(rc) ((rc).right-(rc).left)
|
||
|
#define RECTHEIGHT(rc) ((rc).bottom-(rc).top)
|
||
|
|
||
|
STDAPI_(void) DllAddRef(void);
|
||
|
STDAPI_(void) DllRelease(void);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Info string MAX length
|
||
|
//
|
||
|
#define MAX_INFO_STRING MAX_PATH * 3
|
||
|
|
||
|
//
|
||
|
// Global variables
|
||
|
//
|
||
|
EXTERN_C HINSTANCE g_hinst;
|
||
|
|
||
|
#define HINST_THISDLL g_hinst
|
||
|
|
||
|
#ifdef WINNT
|
||
|
#define g_bRunOnNT TRUE
|
||
|
#ifdef DOWNLEVEL
|
||
|
#define g_bRunOnNT5 FALSE
|
||
|
#else
|
||
|
#define g_bRunOnNT5 TRUE
|
||
|
#endif
|
||
|
#else
|
||
|
#define g_bRunOnNT FALSE
|
||
|
#define g_bRunOnNT5 FALSE
|
||
|
#endif
|
||
|
|
||
|
EXTERN_C BOOL g_bRunOnIE4Shell;
|
||
|
|
||
|
#ifdef DOWNLEVEL
|
||
|
|
||
|
#pragma message("DOWNLEVEL is defined")
|
||
|
|
||
|
#undef PathBuildRoot
|
||
|
#undef PathCombine
|
||
|
#undef PathFileExists
|
||
|
#undef PathIsDirectory
|
||
|
#undef PathIsUNC
|
||
|
#undef PathRemoveArgs
|
||
|
|
||
|
#undef PathFindExtension
|
||
|
STDAPI_(LPTSTR) PathFindExtension(LPCTSTR pszPath);
|
||
|
|
||
|
#undef PathFindFileName
|
||
|
STDAPI_(LPTSTR) PathFindFileName(LPCTSTR pPath);
|
||
|
|
||
|
#undef PathIsRoot
|
||
|
STDAPI_(BOOL) PathIsRoot(LPCTSTR pPath);
|
||
|
|
||
|
#undef PathQuoteSpaces
|
||
|
STDAPI_(void) PathQuoteSpaces(LPTSTR lpsz);
|
||
|
|
||
|
#undef PathRemoveBlanks
|
||
|
STDAPI_(void) PathRemoveBlanks(LPTSTR lpszString);
|
||
|
|
||
|
#undef PathRemoveFileSpec
|
||
|
STDAPI_(BOOL) PathRemoveFileSpec(LPTSTR pFile);
|
||
|
|
||
|
#undef PathGetArgs
|
||
|
STDAPI_(LPTSTR) PathGetArgs(LPCTSTR pszPath);
|
||
|
|
||
|
#undef PathStripToRoot
|
||
|
STDAPI_(BOOL) PathStripToRoot(LPTSTR szRoot);
|
||
|
|
||
|
#undef PathUnquoteSpaces
|
||
|
STDAPI_(void) PathUnquoteSpaces(LPTSTR lpsz);
|
||
|
|
||
|
#undef SHAnsiToUnicode
|
||
|
STDAPI_(int)
|
||
|
SHAnsiToUnicode(LPCSTR pszSrc, LPWSTR pwszDst, int cwchBuf);
|
||
|
|
||
|
#undef SHDeleteKey
|
||
|
|
||
|
#ifdef UNICODE
|
||
|
STDAPI_(DWORD)
|
||
|
SHDeleteKeyW(
|
||
|
IN HKEY hkey,
|
||
|
IN LPCWSTR pwszSubKey);
|
||
|
#define SHDeleteKey SHDeleteKeyW
|
||
|
#else
|
||
|
STDAPI_(DWORD)
|
||
|
SHDeleteKeyA(
|
||
|
IN HKEY hkey,
|
||
|
IN LPCSTR pszSubKey);
|
||
|
#define SHDeleteKey SHDeleteKeyA
|
||
|
#endif
|
||
|
|
||
|
#undef SHQueryValueEx
|
||
|
#undef SHQueryValueExA
|
||
|
#undef SHQueryValueExW
|
||
|
|
||
|
STDAPI_(DWORD)
|
||
|
SHQueryValueExW(
|
||
|
IN HKEY hkey,
|
||
|
IN LPCWSTR pwszValue,
|
||
|
IN LPDWORD lpReserved,
|
||
|
OUT LPDWORD pdwType,
|
||
|
OUT LPVOID pvData,
|
||
|
IN OUT LPDWORD pcbData);
|
||
|
|
||
|
STDAPI_(DWORD)
|
||
|
SHQueryValueExA(
|
||
|
IN HKEY hkey,
|
||
|
IN LPCSTR pszValue,
|
||
|
IN LPDWORD lpReserved,
|
||
|
OUT LPDWORD pdwType,
|
||
|
OUT LPVOID pvData,
|
||
|
IN OUT LPDWORD pcbData);
|
||
|
|
||
|
#ifdef UNICODE
|
||
|
#define SHQueryValueEx SHQueryValueExW
|
||
|
#else
|
||
|
#define SHQueryValueEx SHQueryValueExA
|
||
|
#endif
|
||
|
|
||
|
#undef SHStrDup
|
||
|
|
||
|
#ifdef UNICODE
|
||
|
STDAPI SHStrDupW(LPCWSTR psz, WCHAR **ppwsz);
|
||
|
#define SHStrDup SHStrDupW
|
||
|
#else
|
||
|
STDAPI SHStrDupA(LPCSTR psz, WCHAR **ppwsz);
|
||
|
#define SHStrDup SHStrDupA
|
||
|
#endif
|
||
|
|
||
|
#define OVERRIDE_SHLWAPI_PATH_FUNCTIONS
|
||
|
|
||
|
#include "shsemip.h"
|
||
|
|
||
|
#endif //DOWNLEVEL
|
||
|
|
||
|
#endif // _PRIV_H_
|