| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794 |
- //
- // Copyright (c) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE file in the project root for full license information.
- //
- //
- //
- // ===========================================================================
- // File: palrt.h
- //
- // ===========================================================================
- /*++
- Abstract:
- Rotor runtime functions. These are functions which are ordinarily
- implemented as part of the Win32 API set, but for Rotor, are
- implemented as a runtime library on top of the PAL.
- Author:
-
- Revision History:
- --*/
- #ifndef __PALRT_H__
- #define __PALRT_H__
- /******************* HRESULTs *********************************************/
- #ifdef RC_INVOKED
- #define _HRESULT_TYPEDEF_(_sc) _sc
- #else // RC_INVOKED
- #define _HRESULT_TYPEDEF_(_sc) ((HRESULT)_sc)
- #endif // RC_INVOKED
- #define S_OK _HRESULT_TYPEDEF_(0x00000000L)
- #define S_FALSE _HRESULT_TYPEDEF_(0x00000001L)
- #define E_NOTIMPL _HRESULT_TYPEDEF_(0x80004001L)
- #define E_NOINTERFACE _HRESULT_TYPEDEF_(0x80004002L)
- #define E_UNEXPECTED _HRESULT_TYPEDEF_(0x8000FFFFL)
- #define E_OUTOFMEMORY _HRESULT_TYPEDEF_(0x8007000EL)
- #define E_INVALIDARG _HRESULT_TYPEDEF_(0x80070057L)
- #define E_POINTER _HRESULT_TYPEDEF_(0x80004003L)
- #define E_HANDLE _HRESULT_TYPEDEF_(0x80070006L)
- #define E_ABORT _HRESULT_TYPEDEF_(0x80004004L)
- #define E_FAIL _HRESULT_TYPEDEF_(0x80004005L)
- #define E_ACCESSDENIED _HRESULT_TYPEDEF_(0x80070005L)
- #define E_PENDING _HRESULT_TYPEDEF_(0x8000000AL)
- #define DISP_E_PARAMNOTFOUND _HRESULT_TYPEDEF_(0x80020004L)
- #define DISP_E_TYPEMISMATCH _HRESULT_TYPEDEF_(0x80020005L)
- #define DISP_E_BADVARTYPE _HRESULT_TYPEDEF_(0x80020008L)
- #define DISP_E_OVERFLOW _HRESULT_TYPEDEF_(0x8002000AL)
- #define DISP_E_DIVBYZERO _HRESULT_TYPEDEF_(0x80020012L)
- #define CLASS_E_CLASSNOTAVAILABLE _HRESULT_TYPEDEF_(0x80040111L)
- #define CLASS_E_NOAGGREGATION _HRESULT_TYPEDEF_(0x80040110L)
- #define CO_E_CLASSSTRING _HRESULT_TYPEDEF_(0x800401F3L)
- #define URL_E_INVALID_SYNTAX _HRESULT_TYPEDEF_(0x80041001L)
- #define MK_E_SYNTAX _HRESULT_TYPEDEF_(0x800401E4L)
- #define STG_E_INVALIDFUNCTION _HRESULT_TYPEDEF_(0x80030001L)
- #define STG_E_FILENOTFOUND _HRESULT_TYPEDEF_(0x80030002L)
- #define STG_E_PATHNOTFOUND _HRESULT_TYPEDEF_(0x80030003L)
- #define STG_E_WRITEFAULT _HRESULT_TYPEDEF_(0x8003001DL)
- #define STG_E_FILEALREADYEXISTS _HRESULT_TYPEDEF_(0x80030050L)
- #define STG_E_ABNORMALAPIEXIT _HRESULT_TYPEDEF_(0x800300FAL)
- #define NTE_BAD_UID _HRESULT_TYPEDEF_(0x80090001L)
- #define NTE_BAD_HASH _HRESULT_TYPEDEF_(0x80090002L)
- #define NTE_BAD_KEY _HRESULT_TYPEDEF_(0x80090003L)
- #define NTE_BAD_LEN _HRESULT_TYPEDEF_(0x80090004L)
- #define NTE_BAD_DATA _HRESULT_TYPEDEF_(0x80090005L)
- #define NTE_BAD_SIGNATURE _HRESULT_TYPEDEF_(0x80090006L)
- #define NTE_BAD_VER _HRESULT_TYPEDEF_(0x80090007L)
- #define NTE_BAD_ALGID _HRESULT_TYPEDEF_(0x80090008L)
- #define NTE_BAD_FLAGS _HRESULT_TYPEDEF_(0x80090009L)
- #define NTE_BAD_TYPE _HRESULT_TYPEDEF_(0x8009000AL)
- #define NTE_BAD_KEY_STATE _HRESULT_TYPEDEF_(0x8009000BL)
- #define NTE_BAD_HASH_STATE _HRESULT_TYPEDEF_(0x8009000CL)
- #define NTE_NO_KEY _HRESULT_TYPEDEF_(0x8009000DL)
- #define NTE_NO_MEMORY _HRESULT_TYPEDEF_(0x8009000EL)
- #define NTE_SIGNATURE_FILE_BAD _HRESULT_TYPEDEF_(0x8009001CL)
- #define NTE_FAIL _HRESULT_TYPEDEF_(0x80090020L)
- #define CRYPT_E_HASH_VALUE _HRESULT_TYPEDEF_(0x80091007L)
- #define TYPE_E_SIZETOOBIG _HRESULT_TYPEDEF_(0x800288C5L)
- #define TYPE_E_DUPLICATEID _HRESULT_TYPEDEF_(0x800288C6L)
- #define STD_CTL_SCODE(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_CONTROL, n)
- #define CTL_E_OVERFLOW STD_CTL_SCODE(6)
- #define CTL_E_OUTOFMEMORY STD_CTL_SCODE(7)
- #define CTL_E_DIVISIONBYZERO STD_CTL_SCODE(11)
- #define CTL_E_OUTOFSTACKSPACE STD_CTL_SCODE(28)
- #define CTL_E_FILENOTFOUND STD_CTL_SCODE(53)
- #define CTL_E_DEVICEIOERROR STD_CTL_SCODE(57)
- #define CTL_E_PERMISSIONDENIED STD_CTL_SCODE(70)
- #define CTL_E_PATHFILEACCESSERROR STD_CTL_SCODE(75)
- #define CTL_E_PATHNOTFOUND STD_CTL_SCODE(76)
- #define INET_E_CANNOT_CONNECT _HRESULT_TYPEDEF_(0x800C0004L)
- #define INET_E_RESOURCE_NOT_FOUND _HRESULT_TYPEDEF_(0x800C0005L)
- #define INET_E_OBJECT_NOT_FOUND _HRESULT_TYPEDEF_(0x800C0006L)
- #define INET_E_DATA_NOT_AVAILABLE _HRESULT_TYPEDEF_(0x800C0007L)
- #define INET_E_DOWNLOAD_FAILURE _HRESULT_TYPEDEF_(0x800C0008L)
- #define INET_E_CONNECTION_TIMEOUT _HRESULT_TYPEDEF_(0x800C000BL)
- #define INET_E_UNKNOWN_PROTOCOL _HRESULT_TYPEDEF_(0x800C000DL)
- #define DBG_PRINTEXCEPTION_C _HRESULT_TYPEDEF_(0x40010006L)
- /********************** errorrep.h ****************************************/
- typedef enum tagEFaultRepRetVal
- {
- frrvOk = 0,
- frrvOkManifest,
- frrvOkQueued,
- frrvErr,
- frrvErrNoDW,
- frrvErrTimeout,
- frrvLaunchDebugger,
- frrvOkHeadless,
- frrvErrAnotherInstance
- } EFaultRepRetVal;
- /**************************************************************************/
- #ifndef RC_INVOKED
- #include "pal.h"
- /*
- #ifndef PAL_STDCPP_COMPAT
- #ifdef __cplusplus
- #ifndef __PLACEMENT_NEW_INLINE
- #define __PLACEMENT_NEW_INLINE
- inline void *__cdecl operator new(size_t, void *_P)
- {
- return (_P);
- }
- #endif // __PLACEMENT_NEW_INLINE
- #endif // __cplusplus
- #endif // !PAL_STDCPP_COMPAT
- */
- #include <pal_assert.h>
- #if defined(_DEBUG)
- #define ROTOR_PAL_CTOR_TEST_BODY(TESTNAME) \
- class TESTNAME ## _CTOR_TEST { \
- public: \
- class HelperClass { \
- public: \
- HelperClass(const char *String) { \
- _ASSERTE (m_s == NULL); \
- m_s = String; \
- } \
- \
- void Validate (const char *String) { \
- _ASSERTE (m_s); \
- _ASSERTE (m_s == String); \
- _ASSERTE (!strncmp ( \
- m_s, \
- String, \
- 1000)); \
- } \
- \
- private: \
- const char *m_s; \
- }; \
- \
- TESTNAME ## _CTOR_TEST() { \
- _ASSERTE (m_This == NULL); \
- m_This = this; \
- } \
- \
- void Validate () { \
- _ASSERTE (m_This == this); \
- m_String.Validate(#TESTNAME "_CTOR_TEST"); \
- } \
- \
- private: \
- void *m_This; \
- static HelperClass m_String; \
- }; \
- \
- static TESTNAME ## _CTOR_TEST \
- g_ ## TESTNAME ## _CTOR_TEST; \
- TESTNAME ## _CTOR_TEST::HelperClass \
- TESTNAME ## _CTOR_TEST::m_String(#TESTNAME "_CTOR_TEST");
- #define ROTOR_PAL_CTOR_TEST_RUN(TESTNAME) \
- g_ ## TESTNAME ##_CTOR_TEST.Validate()
- #else // DEBUG
- #define ROTOR_PAL_CTOR_TEST_BODY(TESTNAME)
- #define ROTOR_PAL_CTOR_TEST_RUN(TESTNAME) do {} while (0)
- #endif // DEBUG
- #define NTAPI __stdcall
- #define WINAPI __stdcall
- #define CALLBACK __stdcall
- #define NTSYSAPI
- #define _WINNT_
- // C++ standard, 18.1.5 - offsetof requires a POD (plain old data) struct or
- // union. Since offsetof is a macro, gcc doesn't actually check for improper
- // use of offsetof, it keys off of the -> from NULL (which is also invalid for
- // non-POD types by 18.1.5)
- //
- // As we have numerous examples of this behavior in our codebase,
- // making an offsetof which doesn't use 0.
- // PAL_safe_offsetof is a version of offsetof that protects against an
- // overridden operator&
- #if defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 5 || __GNUC__ > 3)
- #define FIELD_OFFSET(type, field) __builtin_offsetof(type, field)
- #ifndef offsetof
- #define offsetof(type, field) __builtin_offsetof(type, field)
- #endif
- #define PAL_safe_offsetof(type, field) __builtin_offsetof(type, field)
- #else
- #define FIELD_OFFSET(type, field) (((LONG)(LONG_PTR)&(((type *)64)->field)) - 64)
- #ifndef offsetof
- #define offsetof(s,m) ((size_t)((ptrdiff_t)&(((s *)64)->m)) - 64)
- #endif
- #define PAL_safe_offsetof(s,m) ((size_t)((ptrdiff_t)&(char&)(((s *)64)->m))-64)
- #endif
- #define CONTAINING_RECORD(address, type, field) \
- ((type *)((LONG_PTR)(address) - FIELD_OFFSET(type, field)))
- #define ARGUMENT_PRESENT(ArgumentPointer) (\
- (CHAR *)(ArgumentPointer) != (CHAR *)(NULL) )
- #if defined(_WIN64) || defined(_M_ALPHA)
- #define MAX_NATURAL_ALIGNMENT sizeof(ULONGLONG)
- #else
- #define MAX_NATURAL_ALIGNMENT sizeof(ULONG)
- #endif
- #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
- #ifndef COM_NO_WINDOWS_H
- #define COM_NO_WINDOWS_H
- #endif
- #define interface struct
- #define STDMETHODCALLTYPE __stdcall
- #define STDMETHODVCALLTYPE __cdecl
- #define STDAPICALLTYPE __stdcall
- #define STDAPIVCALLTYPE __cdecl
- #define STDMETHODIMP HRESULT STDMETHODCALLTYPE
- #define STDMETHODIMP_(type) type STDMETHODCALLTYPE
- #define STDMETHODIMPV HRESULT STDMETHODVCALLTYPE
- #define STDMETHODIMPV_(type) type STDMETHODVCALLTYPE
- #define STDMETHOD(method) virtual HRESULT STDMETHODCALLTYPE method
- #define STDMETHOD_(type,method) virtual type STDMETHODCALLTYPE method
- #define STDMETHODV(method) virtual HRESULT STDMETHODVCALLTYPE method
- #define STDMETHODV_(type,method) virtual type STDMETHODVCALLTYPE method
- #define STDAPI EXTERN_C HRESULT STDAPICALLTYPE
- #define STDAPI_(type) EXTERN_C type STDAPICALLTYPE
- #define STDAPIV EXTERN_C HRESULT STDAPIVCALLTYPE
- #define STDAPIV_(type) EXTERN_C type STDAPIVCALLTYPE
- #define PURE = 0
- #define THIS_
- #define THIS void
- #ifndef _DECLSPEC_DEFINED_
- #define _DECLSPEC_DEFINED_
- #if defined(_MSC_VER)
- #define DECLSPEC_NOVTABLE __declspec(novtable)
- #define DECLSPEC_IMPORT __declspec(dllimport)
- #define DECLSPEC_SELECTANY __declspec(selectany)
- #elif defined(__GNUC__)
- #define DECLSPEC_NOVTABLE
- #define DECLSPEC_IMPORT
- #define DECLSPEC_SELECTANY __attribute__((weak))
- #else
- #define DECLSPEC_NOVTABLE
- #define DECLSPEC_IMPORT
- #define DECLSPEC_SELECTANY
- #endif
- #endif // !_DECLSPEC_DEFINED_
- #define DECLARE_INTERFACE(iface) interface DECLSPEC_NOVTABLE iface
- #define DECLARE_INTERFACE_(iface, baseiface) interface DECLSPEC_NOVTABLE iface : public baseiface
- #ifdef __cplusplus
- #define REFGUID const GUID &
- #else
- #define REFGUID const GUID *
- #endif
- EXTERN_C const GUID GUID_NULL;
- typedef GUID *LPGUID;
- typedef const GUID FAR *LPCGUID;
- #ifdef __cplusplus
- extern "C++" {
- #if !defined _SYS_GUID_OPERATOR_EQ_ && !defined _NO_SYS_GUID_OPERATOR_EQ_
- #define _SYS_GUID_OPERATOR_EQ_
- inline int IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
- { return !memcmp(&rguid1, &rguid2, sizeof(GUID)); }
- inline int operator==(REFGUID guidOne, REFGUID guidOther)
- { return IsEqualGUID(guidOne,guidOther); }
- inline int operator!=(REFGUID guidOne, REFGUID guidOther)
- { return !IsEqualGUID(guidOne,guidOther); }
- #endif
- };
- #endif // __cplusplus
- #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
- EXTERN_C const GUID FAR name
- typedef GUID IID;
- #ifdef __cplusplus
- #define REFIID const IID &
- #else
- #define REFIID const IID *
- #endif
- #define IID_NULL GUID_NULL
- #define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
- #define __IID_DEFINED__
- typedef GUID CLSID;
- #define CLSID_DEFINED
- #ifdef __cplusplus
- #define REFCLSID const CLSID &
- #else
- #define REFCLSID const CLSID *
- #endif
- #define CLSID_NULL GUID_NULL
- #define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
- typedef CLSID *LPCLSID;
- typedef UINT_PTR WPARAM;
- typedef LONG_PTR LRESULT;
- typedef LONG SCODE;
- typedef union _ULARGE_INTEGER {
- struct {
- #if BIGENDIAN
- DWORD HighPart;
- DWORD LowPart;
- #else
- DWORD LowPart;
- DWORD HighPart;
- #endif
- }
- #ifndef PAL_STDCPP_COMPAT
- u
- #endif // PAL_STDCPP_COMPAT
- ;
- ULONGLONG QuadPart;
- } ULARGE_INTEGER, *PULARGE_INTEGER;
- /******************* HRESULT types ****************************************/
- #define FACILITY_WINDOWS 8
- #define FACILITY_URT 19
- #define FACILITY_UMI 22
- #define FACILITY_SXS 23
- #define FACILITY_STORAGE 3
- #define FACILITY_SSPI 9
- #define FACILITY_SCARD 16
- #define FACILITY_SETUPAPI 15
- #define FACILITY_SECURITY 9
- #define FACILITY_RPC 1
- #define FACILITY_WIN32 7
- #define FACILITY_CONTROL 10
- #define FACILITY_NULL 0
- #define FACILITY_MSMQ 14
- #define FACILITY_MEDIASERVER 13
- #define FACILITY_INTERNET 12
- #define FACILITY_ITF 4
- #define FACILITY_DPLAY 21
- #define FACILITY_DISPATCH 2
- #define FACILITY_COMPLUS 17
- #define FACILITY_CERT 11
- #define FACILITY_ACS 20
- #define FACILITY_AAF 18
- #define NO_ERROR 0L
- #define SEVERITY_SUCCESS 0
- #define SEVERITY_ERROR 1
- #define SUCCEEDED(Status) ((HRESULT)(Status) >= 0)
- #define FAILED(Status) ((HRESULT)(Status)<0)
- #define IS_ERROR(Status) ((ULONG)(Status) >> 31 == SEVERITY_ERROR) // diff from win32
- #define HRESULT_CODE(hr) ((hr) & 0xFFFF)
- #define SCODE_CODE(sc) ((sc) & 0xFFFF)
- #define HRESULT_FACILITY(hr) (((hr) >> 16) & 0x1fff)
- #define SCODE_FACILITY(sc) (((sc) >> 16) & 0x1fff)
- #define HRESULT_SEVERITY(hr) (((hr) >> 31) & 0x1)
- #define SCODE_SEVERITY(sc) (((sc) >> 31) & 0x1)
- // both macros diff from Win32
- #define MAKE_HRESULT(sev,fac,code) \
- ((HRESULT) (((ULONG)(sev)<<31) | ((ULONG)(fac)<<16) | ((ULONG)(code))) )
- #define MAKE_SCODE(sev,fac,code) \
- ((SCODE) (((ULONG)(sev)<<31) | ((ULONG)(fac)<<16) | ((LONG)(code))) )
- #define FACILITY_NT_BIT 0x10000000
- #define HRESULT_FROM_WIN32(x) ((HRESULT)(x) <= 0 ? ((HRESULT)(x)) : ((HRESULT) (((x) & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000)))
- #define __HRESULT_FROM_WIN32(x) HRESULT_FROM_WIN32(x)
- #define HRESULT_FROM_NT(x) ((HRESULT) ((x) | FACILITY_NT_BIT))
- /******************* OLE, BSTR, VARIANT *************************/
- STDAPI_(LPVOID) CoTaskMemAlloc(SIZE_T cb);
- STDAPI_(LPVOID) CoTaskMemRealloc(LPVOID pv, SIZE_T cb);
- STDAPI_(void) CoTaskMemFree(LPVOID pv);
- typedef SHORT VARIANT_BOOL;
- #define VARIANT_TRUE ((VARIANT_BOOL)-1)
- #define VARIANT_FALSE ((VARIANT_BOOL)0)
- typedef WCHAR OLECHAR;
- typedef OLECHAR* LPOLESTR;
- typedef const OLECHAR* LPCOLESTR;
- typedef WCHAR *BSTR;
- STDAPI_(BSTR) SysAllocString(const OLECHAR*);
- STDAPI_(BSTR) SysAllocStringLen(const OLECHAR*, UINT);
- STDAPI_(BSTR) SysAllocStringByteLen(const char *, UINT);
- STDAPI_(void) SysFreeString(BSTR);
- STDAPI_(UINT) SysStringLen(BSTR);
- STDAPI_(UINT) SysStringByteLen(BSTR);
- typedef double DATE;
- typedef union tagCY {
- struct {
- #if BIGENDIAN
- LONG Hi;
- ULONG Lo;
- #else
- ULONG Lo;
- LONG Hi;
- #endif
- } u;
- LONGLONG int64;
- } CY, *LPCY;
- typedef CY CURRENCY;
- typedef struct tagDEC {
- // Decimal.cs treats the first two shorts as one long
- // And they seriable the data so we need to little endian
- // seriliazation
- // The wReserved overlaps with Variant's vt member
- #if BIGENDIAN
- union {
- struct {
- BYTE sign;
- BYTE scale;
- };
- USHORT signscale;
- };
- USHORT wReserved;
- #else
- USHORT wReserved;
- union {
- struct {
- BYTE scale;
- BYTE sign;
- };
- USHORT signscale;
- };
- #endif
- ULONG Hi32;
- union {
- struct {
- ULONG Lo32;
- ULONG Mid32;
- };
- ULONGLONG Lo64;
- };
- } DECIMAL, *LPDECIMAL;
- typedef struct tagBLOB {
- ULONG cbSize;
- BYTE *pBlobData;
- } BLOB, *LPBLOB;
- interface IStream;
- interface IRecordInfo;
- typedef unsigned short VARTYPE;
- enum VARENUM {
- VT_EMPTY = 0,
- VT_NULL = 1,
- VT_I2 = 2,
- VT_I4 = 3,
- VT_R4 = 4,
- VT_R8 = 5,
- VT_CY = 6,
- VT_DATE = 7,
- VT_BSTR = 8,
- VT_DISPATCH = 9,
- VT_ERROR = 10,
- VT_BOOL = 11,
- VT_VARIANT = 12,
- VT_UNKNOWN = 13,
- VT_DECIMAL = 14,
- VT_I1 = 16,
- VT_UI1 = 17,
- VT_UI2 = 18,
- VT_UI4 = 19,
- VT_I8 = 20,
- VT_UI8 = 21,
- VT_INT = 22,
- VT_UINT = 23,
- VT_VOID = 24,
- VT_HRESULT = 25,
- VT_PTR = 26,
- VT_SAFEARRAY = 27,
- VT_CARRAY = 28,
- VT_USERDEFINED = 29,
- VT_LPSTR = 30,
- VT_LPWSTR = 31,
- VT_RECORD = 36,
- VT_INT_PTR = 37,
- VT_UINT_PTR = 38,
- VT_FILETIME = 64,
- VT_BLOB = 65,
- VT_STREAM = 66,
- VT_STORAGE = 67,
- VT_STREAMED_OBJECT = 68,
- VT_STORED_OBJECT = 69,
- VT_BLOB_OBJECT = 70,
- VT_CF = 71,
- VT_CLSID = 72,
- VT_VECTOR = 0x1000,
- VT_ARRAY = 0x2000,
- VT_BYREF = 0x4000,
- VT_TYPEMASK = 0xfff,
- };
- typedef struct tagVARIANT VARIANT, *LPVARIANT;
- typedef struct tagSAFEARRAY SAFEARRAY;
- struct tagVARIANT
- {
- union
- {
- struct
- {
- #if BIGENDIAN
- // We need to make sure vt overlaps with DECIMAL's wReserved.
- // See the DECIMAL type for details.
- WORD wReserved1;
- VARTYPE vt;
- #else
- VARTYPE vt;
- WORD wReserved1;
- #endif
- WORD wReserved2;
- WORD wReserved3;
- union
- {
- LONGLONG llVal;
- LONG lVal;
- BYTE bVal;
- SHORT iVal;
- FLOAT fltVal;
- DOUBLE dblVal;
- VARIANT_BOOL boolVal;
- SCODE scode;
- CY cyVal;
- DATE date;
- BSTR bstrVal;
- interface IUnknown *punkVal;
- interface IDispatch *pdispVal;
- SAFEARRAY *parray;
- BYTE *pbVal;
- SHORT *piVal;
- LONG *plVal;
- LONGLONG *pllVal;
- FLOAT *pfltVal;
- DOUBLE *pdblVal;
- VARIANT_BOOL *pboolVal;
- SCODE *pscode;
- CY *pcyVal;
- DATE *pdate;
- BSTR *pbstrVal;
- interface IUnknown **ppunkVal;
- VARIANT *pvarVal;
- PVOID byref;
- CHAR cVal;
- USHORT uiVal;
- ULONG ulVal;
- ULONGLONG ullVal;
- INT intVal;
- UINT uintVal;
- DECIMAL *pdecVal;
- CHAR *pcVal;
- USHORT *puiVal;
- ULONG *pulVal;
- ULONGLONG *pullVal;
- INT *pintVal;
- UINT *puintVal;
- struct __tagBRECORD
- {
- PVOID pvRecord;
- interface IRecordInfo *pRecInfo;
- } brecVal;
- } n3;
- } n2;
- DECIMAL decVal;
- } n1;
- };
- typedef VARIANT VARIANTARG, *LPVARIANTARG;
- STDAPI_(void) VariantInit(VARIANT * pvarg);
- STDAPI_(HRESULT) VariantClear(VARIANT * pvarg);
- #define V_VT(X) ((X)->n1.n2.vt)
- #define V_UNION(X, Y) ((X)->n1.n2.n3.Y)
- #define V_RECORDINFO(X) ((X)->n1.n2.n3.brecVal.pRecInfo)
- #define V_RECORD(X) ((X)->n1.n2.n3.brecVal.pvRecord)
- #define V_UI1(X) V_UNION(X, bVal)
- #define V_UI1REF(X) V_UNION(X, pbVal)
- #define V_I2(X) V_UNION(X, iVal)
- #define V_I2REF(X) V_UNION(X, piVal)
- #define V_I4(X) V_UNION(X, lVal)
- #define V_I4REF(X) V_UNION(X, plVal)
- #define V_I8(X) V_UNION(X, llVal)
- #define V_I8REF(X) V_UNION(X, pllVal)
- #define V_R4(X) V_UNION(X, fltVal)
- #define V_R4REF(X) V_UNION(X, pfltVal)
- #define V_R8(X) V_UNION(X, dblVal)
- #define V_R8REF(X) V_UNION(X, pdblVal)
- #define V_I1(X) V_UNION(X, cVal)
- #define V_I1REF(X) V_UNION(X, pcVal)
- #define V_UI2(X) V_UNION(X, uiVal)
- #define V_UI2REF(X) V_UNION(X, puiVal)
- #define V_UI4(X) V_UNION(X, ulVal)
- #define V_UI4REF(X) V_UNION(X, pulVal)
- #define V_UI8(X) V_UNION(X, ullVal)
- #define V_UI8REF(X) V_UNION(X, pullVal)
- #define V_INT(X) V_UNION(X, intVal)
- #define V_INTREF(X) V_UNION(X, pintVal)
- #define V_UINT(X) V_UNION(X, uintVal)
- #define V_UINTREF(X) V_UNION(X, puintVal)
- #define V_ARRAY(X) V_UNION(X, parray)
- #ifdef _WIN64
- #define V_INT_PTR(X) V_UNION(X, llVal)
- #define V_UINT_PTR(X) V_UNION(X, ullVal)
- #define V_INT_PTRREF(X) V_UNION(X, pllVal)
- #define V_UINT_PTRREF(X) V_UNION(X, pullVal)
- #else
- #define V_INT_PTR(X) V_UNION(X, lVal)
- #define V_UINT_PTR(X) V_UNION(X, ulVal)
- #define V_INT_PTRREF(X) V_UNION(X, plVal)
- #define V_UINT_PTRREF(X) V_UNION(X, pulVal)
- #endif
- #define V_CY(X) V_UNION(X, cyVal)
- #define V_CYREF(X) V_UNION(X, pcyVal)
- #define V_DATE(X) V_UNION(X, date)
- #define V_DATEREF(X) V_UNION(X, pdate)
- #define V_BSTR(X) V_UNION(X, bstrVal)
- #define V_BSTRREF(X) V_UNION(X, pbstrVal)
- #define V_UNKNOWN(X) V_UNION(X, punkVal)
- #define V_UNKNOWNREF(X) V_UNION(X, ppunkVal)
- #define V_VARIANTREF(X) V_UNION(X, pvarVal)
- #define V_DISPATCH(X) V_UNION(X, pdispVal)
- #define V_ERROR(X) V_UNION(X, scode)
- #define V_ERRORREF(X) V_UNION(X, pscode)
- #define V_BOOL(X) V_UNION(X, boolVal)
- #define V_BOOLREF(X) V_UNION(X, pboolVal)
- #define V_BYREF(X) V_UNION(X, byref)
- #define V_DECIMAL(X) ((X)->n1.decVal)
- #define V_DECIMALREF(X) V_UNION(X, pdecVal)
- #define V_ISBYREF(X) (V_VT(X)&VT_BYREF)
- STDAPI CreateStreamOnHGlobal(PVOID hGlobal, BOOL fDeleteOnRelease, interface IStream** ppstm);
- #define STGM_DIRECT 0x00000000L
- #define STGM_READ 0x00000000L
- #define STGM_WRITE 0x00000001L
- #define STGM_READWRITE 0x00000002L
- #define STGM_SHARE_DENY_NONE 0x00000040L
- #define STGM_SHARE_DENY_READ 0x00000030L
- #define STGM_SHARE_DENY_WRITE 0x00000020L
- #define STGM_SHARE_EXCLUSIVE 0x00000010L
- #define STGM_DELETEONRELEASE 0x04000000L
- #define STGM_CREATE 0x00001000L
- #define STGM_CONVERT 0x00020000L
- #define STGM_FAILIFTHERE 0x00000000L
- #define STGM_NOSNAPSHOT 0x00200000L
- STDAPI IIDFromString(LPOLESTR lpsz, IID* lpiid);
- STDAPI_(int) StringFromGUID2(REFGUID rguid, LPOLESTR lpsz, int cchMax);
- /******************* CRYPT **************************************/
- #define PUBLICKEYBLOB 0x6
- //
- // Algorithm IDs and Flags
- //
- #define GET_ALG_CLASS(x) (x & (7 << 13))
- #define GET_ALG_TYPE(x) (x & (15 << 9))
- #define GET_ALG_SID(x) (x & (511))
- typedef unsigned int ALG_ID;
- // Algorithm classes
- #define ALG_CLASS_SIGNATURE (1 << 13)
- #define ALG_CLASS_HASH (4 << 13)
- // Algorithm types
- #define ALG_TYPE_ANY (0)
- // Hash sub ids
- #define ALG_SID_SHA1 4
- // algorithm identifier definitions
- #define CALG_SHA1 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA1)
- /******************* NLS ****************************************/
- typedef
- enum tagMIMECONTF {
- MIMECONTF_MAILNEWS = 0x1,
- MIMECONTF_BROWSER = 0x2,
- MIMECONTF_MINIMAL = 0x4,
- MIMECONTF_IMPORT = 0x8,
- MIMECONTF_SAVABLE_MAILNEWS = 0x100,
- MIMECONTF_SAVABLE_BROWSER = 0x200,
- MIMECONTF_EXPORT = 0x400,
- MIMECONTF_PRIVCONVERTER = 0x10000,
- MIMECONTF_VALID = 0x20000,
- MIMECONTF_VALID_NLS = 0x40000,
- MIMECONTF_MIME_IE4 = 0x10000000,
- MIMECONTF_MIME_LATEST = 0x20000000,
- MIMECONTF_MIME_REGISTRY = 0x40000000
- } MIMECONTF;
- #define LCMAP_LOWERCASE 0x00000100
- #define LCMAP_UPPERCASE 0x00000200
- #define LCMAP_SORTKEY 0x00000400
- #define LCMAP_BYTEREV 0x00000800
- #define LCMAP_HIRAGANA 0x00100000
- #define LCMAP_KATAKANA 0x00200000
- #define LCMAP_HALFWIDTH 0x00400000
- #define LCMAP_FULLWIDTH 0x00800000
- #define LCMAP_LINGUISTIC_CASING 0x01000000
- // 8 characters for language
- // 8 characters for region
- // 64 characters for suffix (script)
- // 2 characters for '-' separators
- // 2 characters for prefix like "i-" or "x-"
- // 1 null termination
- #define LOCALE_NAME_MAX_LENGTH 85
- #define LOCALE_SCOUNTRY 0x00000006
- #define LOCALE_SENGCOUNTRY 0x00001002
- #define LOCALE_SLANGUAGE 0x00000002
- #define LOCALE_SENGLANGUAGE 0x00001001
- #define LOCALE_SDATE 0x0000001D
- #define LOCALE_STIME 0x0000001E
- #define CSTR_LESS_THAN 1
- #define CSTR_EQUAL 2
- #define CSTR_GREATER_THAN 3
- #define NORM_IGNORENONSPACE 0x00000002
- #define WC_COMPOSITECHECK 0x00000000 // NOTE: diff from winnls.h
- /******************* shlwapi ************************************/
- // note: diff in NULL handing and calling convetion
- #define StrCpyW PAL_wcscpy
- #define StrCpyNW lstrcpynW // note: can't be wcsncpy!
- #define StrCatW PAL_wcscat
- #define StrChrW (WCHAR*)PAL_wcschr
- #define StrCmpW PAL_wcscmp
- #define StrCmpIW _wcsicmp
- #define StrCmpNW PAL_wcsncmp
- #define StrCmpNIW _wcsnicmp
- STDAPI_(LPWSTR) StrNCatW(LPWSTR lpFront, LPCWSTR lpBack, int cchMax);
- STDAPI_(int) StrToIntW(LPCWSTR lpSrc);
- STDAPI_(LPWSTR) StrStrIW(LPCWSTR lpFirst, LPCWSTR lpSrch);
- STDAPI_(LPWSTR) StrRChrW(LPCWSTR lpStart, LPCWSTR lpEnd, WCHAR wMatch);
- STDAPI_(LPWSTR) StrCatBuffW(LPWSTR pszDest, LPCWSTR pszSrc, int cchDestBuffSize);
- #define lstrcmpW PAL_wcscmp
- #define lstrcmpiW _wcsicmp
- #define wnsprintfW _snwprintf // note: not 100% compatible (wsprintf should be subset of sprintf...)
- #define wvnsprintfW _vsnwprintf // note: not 100% compatible (wsprintf should be subset of sprintf...)
- #ifdef UNICODE
- #define StrCpy StrCpyW
- #define StrCpyN StrCpyNW
- #define StrCat StrCatW
- #define StrNCat StrNCatW
- #define StrChr StrChrW
- #define StrCmp StrCmpW
- #define StrCmpN StrCmpNW
- #define StrCmpI StrCmpIW
- #define StrCmpNI StrCmpNIW
- #define StrToInt StrToIntW
- #define StrStrI StrStrIW
- #define StrRChr StrRChrW
- #define StrCatBuff StrCatBuffW
- #define lstrcmp lstrcmpW
- #define lstrcmpi lstrcmpiW
- #define wnsprintf wnsprintfW
- #endif
- #ifdef __cplusplus
- /*
- Safe CRT functions are not available (yet) on all platforms, so we use our own implementations from safecrt.h.
- */
- #define _CRT_ALTERNATIVE_INLINES
- #define _SAFECRT_NO_INCLUDES 1
- #define _SAFECRT_USE_INLINES 1
- #define _SAFECRT_SET_ERRNO 0
- #define _SAFECRT_DEFINE_MBS_FUNCTIONS 0
- #define _SAFECRT_DEFINE_TCS_MACROS 1
- /*
- #define _SAFECRT__ISMBBLEAD(_Character) 0
- #define _SAFECRT__MBSDEC(_String, _Current) (_Current - 1)
- */
- #include "safecrt.h"
- #include "specstrings.h"
- /*
- The wrappers below are simple implementations that may not be as robust as complete functions in the Secure CRT library.
- Remember to fix the errcode defintion in safecrt.h.
- */
- #define _wcslwr_s _wcslwr_unsafe
- #define _snwprintf_s _snwprintf_unsafe
- #define _vsnwprintf_s _vsnwprintf_unsafe
- #define _snprintf_s _snprintf_unsafe
- #define _vsnprintf_s _vsnprintf_unsafe
- #define swscanf_s swscanf
- #define sscanf_s sscanf
- #define _wfopen_s _wfopen_unsafe
- #define fopen_s _fopen_unsafe
- #define _strlwr_s _strlwr_unsafe
- #define _vscprintf _vscprintf_unsafe
- #define _vscwprintf _vscwprintf_unsafe
- #define sprintf_s _snprintf
- #define swprintf_s _snwprintf
- #define vsprintf_s _vsnprintf
- #define vswprintf_s _vsnwprintf
- extern "C++" {
- #include <safemath.h>
- inline errno_t __cdecl _wcslwr_unsafe(WCHAR *str, size_t sz)
- {
- size_t fullSize;
- if(!ClrSafeInt<size_t>::multiply(sz, sizeof(WCHAR), fullSize))
- return 1;
- WCHAR *copy = (WCHAR *)malloc(fullSize);
- if(copy == nullptr)
- return 1;
- errno_t retCode = wcscpy_s(copy, sz, str);
- if(retCode) {
- free(copy);
- return 1;
- }
- _wcslwr(copy);
- wcscpy_s(str, sz, copy);
- free(copy);
-
- return 0;
- }
- inline errno_t __cdecl _strlwr_unsafe(char *str, size_t sz)
- {
- char *copy = (char *)malloc(sz);
- if(copy == nullptr)
- return 1;
- errno_t retCode = strcpy_s(copy, sz, str);
- if(retCode) {
- free(copy);
- return 1;
- }
- _strlwr(copy);
- strcpy_s(str, sz, copy);
- free(copy);
-
- return 0;
- }
- inline int __cdecl _vscprintf_unsafe(const char *_Format, va_list _ArgList)
- {
- int guess = 10;
- for (;;)
- {
- char *buf = (char *)malloc(guess * sizeof(char));
- if(buf == nullptr)
- return 0;
- int ret = _vsnprintf(buf, guess, _Format, _ArgList);
- free(buf);
- if ((ret != -1) && (ret < guess))
- return ret;
- guess *= 2;
- }
- }
- inline int __cdecl _vscwprintf_unsafe(const WCHAR *_Format, va_list _ArgList)
- {
- int guess = 256;
- for (;;)
- {
- WCHAR *buf = (WCHAR *)malloc(guess * sizeof(WCHAR));
- if (buf == nullptr)
- return 0;
- va_list apcopy;
- va_copy(apcopy, _ArgList);
- int ret = _vsnwprintf(buf, guess, _Format, apcopy);
- free(buf);
- va_end(apcopy);
- if ((ret != -1) && (ret < guess))
- return ret;
- guess *= 2;
- }
- }
- inline int __cdecl _vsnwprintf_unsafe(WCHAR *_Dst, size_t _SizeInWords, size_t _Count, const WCHAR *_Format, va_list _ArgList)
- {
- if (_Count == _TRUNCATE) _Count = _SizeInWords - 1;
- int ret = _vsnwprintf(_Dst, _Count, _Format, _ArgList);
- _Dst[_SizeInWords - 1] = L'\0';
- if (ret < 0 && errno == 0)
- {
- errno = ERANGE;
- }
- return ret;
- }
- inline int __cdecl _snwprintf_unsafe(WCHAR *_Dst, size_t _SizeInWords, size_t _Count, const WCHAR *_Format, ...)
- {
- int ret;
- va_list _ArgList;
- va_start(_ArgList, _Format);
- ret = _vsnwprintf_unsafe(_Dst, _SizeInWords, _Count, _Format, _ArgList);
- va_end(_ArgList);
- return ret;
- }
- inline int __cdecl _vsnprintf_unsafe(char *_Dst, size_t _SizeInWords, size_t _Count, const char *_Format, va_list _ArgList)
- {
- if (_Count == _TRUNCATE) _Count = _SizeInWords - 1;
- int ret = _vsnprintf(_Dst, _Count, _Format, _ArgList);
- _Dst[_SizeInWords - 1] = L'\0';
- if (ret < 0 && errno == 0)
- {
- errno = ERANGE;
- }
- return ret;
- }
- inline int __cdecl _snprintf_unsafe(char *_Dst, size_t _SizeInWords, size_t _Count, const char *_Format, ...)
- {
- int ret;
- va_list _ArgList;
- va_start(_ArgList, _Format);
- ret = _vsnprintf_unsafe(_Dst, _SizeInWords, _Count, _Format, _ArgList);
- va_end(_ArgList);
- return ret;
- }
- inline errno_t __cdecl _wfopen_unsafe(PAL_FILE * *ff, const WCHAR *fileName, const WCHAR *mode)
- {
- PAL_FILE *result = _wfopen(fileName, mode);
- if(result == 0) {
- return 1;
- } else {
- *ff = result;
- return 0;
- }
- }
- inline errno_t __cdecl _fopen_unsafe(PAL_FILE * *ff, const char *fileName, const char *mode)
- {
- PAL_FILE *result = PAL_fopen(fileName, mode);
- if(result == 0) {
- return 1;
- } else {
- *ff = result;
- return 0;
- }
- }
- /* _itow_s */
- _SAFECRT__EXTERN_C
- errno_t __cdecl _itow_s(int _Value, WCHAR *_Dst, size_t _SizeInWords, int _Radix);
- #if defined(__cplusplus) && _SAFECRT_USE_CPP_OVERLOADS
- template <size_t _SizeInWords>
- inline
- errno_t __cdecl _itow_s(int _Value, WCHAR (&_Dst)[_SizeInWords], int _Radix)
- {
- return _itow_s(_Value, _Dst, _SizeInWords, _Radix);
- }
- #endif
- #if _SAFECRT_USE_INLINES
- __inline
- errno_t __cdecl _itow_s(int _Value, WCHAR *_Dst, size_t _SizeInWords, int _Radix)
- {
- /* validation section */
- _SAFECRT__VALIDATE_STRING(_Dst, _SizeInWords);
- /* TODO: do not write past buffer size */
- _itow(_Value, _Dst, _Radix);
- return 0;
- }
- #endif
- /* _i64tow_s */
- _SAFECRT__EXTERN_C
- errno_t __cdecl _i64tow_s(__int64 _Value, WCHAR *_Dst, size_t _SizeInWords, int _Radix);
- #if defined(__cplusplus) && _SAFECRT_USE_CPP_OVERLOADS
- template <size_t _SizeInWords>
- inline
- errno_t __cdecl _i64tow_s(__int64 _Value, WCHAR (&_Dst)[_SizeInWords], int _Radix)
- {
- return _i64tow_s(_Value, _Dst, _SizeInWords, _Radix);
- }
- #endif
- #if _SAFECRT_USE_INLINES
- __inline
- errno_t __cdecl _i64tow_s(__int64 _Value, WCHAR *_Dst, size_t _SizeInWords, int _Radix)
- {
- /* validation section */
- _SAFECRT__VALIDATE_STRING(_Dst, _SizeInWords);
- /* TODO: do not write past buffer size */
- _i64tow(_Value, _Dst, _Radix);
- return 0;
- }
- #endif
- /* getenv_s */
- /*
- * _ReturnValue indicates if the variable has been found and size needed
- */
- _SAFECRT__EXTERN_C
- errno_t __cdecl getenv_s(size_t *_ReturnValue, char *_Dst, size_t _SizeInWords, const char *_Name);
- #if defined(__cplusplus) && _SAFECRT_USE_CPP_OVERLOADS
- template <size_t _SizeInWords>
- inline
- errno_t __cdecl getenv_s(size_t *_ReturnValue, char *_Dst, size_t _SizeInWords, const char *_Name)
- {
- return getenv_s(_ReturnValue, _Dst, _SizeInWords, _Name);
- }
- #endif
- #if _SAFECRT_USE_INLINES
- __inline
- errno_t __cdecl getenv_s(size_t *_ReturnValue, char *_Dst, size_t _SizeInWords, const char *_Name)
- {
- char *szFound;
- /* validation section */
- _SAFECRT__VALIDATE_STRING(_Dst, _SizeInWords);
- szFound = getenv(_Name);
- if (szFound == nullptr)
- {
- *_ReturnValue = 0;
- return 0;
- }
- *_ReturnValue = strlen(szFound) + 1;
- return strcpy_s(_Dst, _SizeInWords, szFound);
- }
- #endif
-
- }
- #endif /* __cplusplus */
- STDAPI_(BOOL) PathAppendW(LPWSTR pszPath, LPCWSTR pszMore);
- STDAPI_(int) PathCommonPrefixW(LPCWSTR pszFile1, LPCWSTR pszFile2, LPWSTR pszPath);
- PALIMPORT LPWSTR PALAPI PathFindFileNameW(LPCWSTR pPath);
- STDAPI_(int) PathGetDriveNumberW(LPCWSTR lpsz);
- STDAPI_(BOOL) PathIsRelativeW(LPCWSTR lpszPath);
- STDAPI_(BOOL) PathIsUNCW(LPCWSTR pszPath);
- STDAPI_(LPWSTR) PathAddBackslashW(LPWSTR lpszPath);
- STDAPI_(LPWSTR) PathRemoveBackslashW(LPWSTR lpszPath);
- STDAPI_(void) PathRemoveExtensionW(LPWSTR pszPath);
- STDAPI_(LPWSTR) PathCombineW(LPWSTR lpszDest, LPCWSTR lpszDir, LPCWSTR lpszFile);
- STDAPI_(BOOL) PathCanonicalizeW(LPWSTR lpszDst, LPCWSTR lpszSrc);
- STDAPI_(BOOL) PathRelativePathToW(LPWSTR pszPath, LPCWSTR pszFrom, DWORD dwAttrFrom, LPCWSTR pszTo, DWORD dwAttrTo);
- STDAPI_(BOOL) PathRenameExtensionW(LPWSTR pszPath, LPCWSTR pszExt);
- STDAPI_(BOOL) PathRemoveFileSpecW(LPWSTR pFile);
- STDAPI_(void) PathStripPathW (LPWSTR pszPath);
- STDAPI PathCreateFromUrlW(LPCWSTR pszUrl, LPWSTR pszPath, LPDWORD pcchPath, DWORD dwFlags);
- STDAPI_(BOOL) PathIsURLW(LPCWSTR pszPath);
- #define URL_UNESCAPE 0x10000000
- #define URL_ESCAPE_PERCENT 0x00001000
- typedef enum {
- URLIS_FILEURL = 3,
- } URLIS;
- typedef enum {
- URL_PART_SCHEME = 1,
- URL_PART_HOSTNAME = 2,
- } URL_PART;
- STDAPI UrlCanonicalizeW(LPCWSTR pszUrl, LPWSTR pszCanonicalized, LPDWORD pcchCanonicalized, DWORD dwFlags);
- STDAPI UrlCombineW(LPCWSTR pszBase, LPCWSTR pszRelative, LPWSTR pszCombined, LPDWORD pcchCombined, DWORD dwFlags);
- STDAPI UrlEscapeW(LPCWSTR pszUrl, LPWSTR pszEscaped, LPDWORD pcchEscaped, DWORD dwFlags);
- STDAPI UrlUnescapeW(LPWSTR pszURL, LPWSTR pszUnescaped, LPDWORD pcchUnescaped, DWORD dwFlags);
- STDAPI_(BOOL) UrlIsW(LPCWSTR pszUrl, URLIS dwUrlIs);
- STDAPI UrlGetPartW(LPCWSTR pszIn, LPWSTR pszOut, LPDWORD pcchOut, DWORD dwPart, DWORD dwFlags);
- #ifdef UNICODE
- #define PathAppend PathAppendW
- #define PathCommonPrefix PathCommonPrefixW
- #define PathFindFileName PathFindFileNameW
- #define PathIsRelative PathIsRelativeW
- #define PathGetDriveNumber PathGetDriveNumberW
- #define PathIsUNC PathIsUNCW
- #define PathAddBackslash PathAddBackslashW
- #define PathRemoveBackslash PathRemoveBackslashW
- #define PathRemoveExtension PathRemoveExtensionW
- #define PathCombine PathCombineW
- #define PathSkipRoot PathSkipRootW
- #define PathFindExtension PathFindExtensionW
- #define PathCanonicalize PathCanonicalizeW
- #define PathRelativePathTo PathRelativePathToW
- #define PathRemoveFileSpec PathRemoveFileSpecW
- #define PathRenameExtension PathRenameExtensionW
- #define PathStripPath PathStripPathW
- #define PathCreateFromUrl PathCreateFromUrlW
- #define PathIsURL PathIsURLW
- #define UrlCanonicalize UrlCanonicalizeW
- #define UrlCombine UrlCombineW
- #define UrlEscape UrlEscapeW
- #define UrlUnescape UrlUnescapeW
- #define UrlIs UrlIsW
- #define UrlGetPart UrlGetPartW
- #endif // UNICODE
- /******************* misc ***************************************/
- #ifdef __cplusplus
- namespace std
- {
- typedef decltype(nullptr) nullptr_t;
- }
- template< class T >
- typename std::remove_reference<T>::type&& move( T&& t );
- #endif // __cplusplus
- #define __RPC__out
- #define __RPC__in
- #define __RPC__deref_out_opt
- #define __RPC__in_opt
- #define __RPC__inout_xcount(x)
- #define __RPC__in_ecount_full(x)
- #define __RPC__out_ecount_part(x, y)
- #define __RPC__in_xcount(x)
- #define __RPC__inout
- #define __RPC__deref_out_ecount_full_opt(x)
- typedef DWORD OLE_COLOR;
- typedef union __m128i {
- __int8 m128i_i8[16];
- __int16 m128i_i16[8];
- __int32 m128i_i32[4];
- __int64 m128i_i64[2];
- unsigned __int8 m128i_u8[16];
- unsigned __int16 m128i_u16[8];
- unsigned __int32 m128i_u32[4];
- unsigned __int64 m128i_u64[2];
- } __m128i;
- #define PF_COMPARE_EXCHANGE_DOUBLE 2
- typedef VOID (NTAPI * WAITORTIMERCALLBACKFUNC) (PVOID, BOOLEAN );
- typedef HANDLE HWND;
- #define IS_TEXT_UNICODE_SIGNATURE 0x0008
- #define IS_TEXT_UNICODE_UNICODE_MASK 0x000F
- BOOL IsTextUnicode(CONST VOID* lpv, int iSize, LPINT lpiResult);
- typedef struct _LIST_ENTRY {
- struct _LIST_ENTRY *Flink;
- struct _LIST_ENTRY *Blink;
- } LIST_ENTRY, *PLIST_ENTRY;
- typedef VOID (__stdcall *WAITORTIMERCALLBACK)(PVOID, BOOLEAN);
- // PORTABILITY_ASSERT and PORTABILITY_WARNING macros are meant to be used to
- // mark places in the code that needs attention for portability. The usual
- // usage pattern is:
- //
- // int get_scratch_register() {
- // #if defined(_TARGET_X86_)
- // return eax;
- // #elif defined(_TARGET_AMD64_)
- // return rax;
- // #elif defined(_TARGET_ARM_)
- // return r0;
- // #else
- // PORTABILITY_ASSERT("scratch register");
- // return 0;
- // #endif
- // }
- //
- // PORTABILITY_ASSERT is meant to be used inside functions/methods. It can
- // introduce compile-time and/or run-time errors.
- // PORTABILITY_WARNING is meant to be used outside functions/methods. It can
- // introduce compile-time errors or warnings only.
- //
- // People starting new ports will first define these to just cause run-time
- // errors. Once they fix all the places that need attention for portability,
- // they can define PORTABILITY_ASSERT and PORTABILITY_WARNING to cause
- // compile-time errors to make sure that they haven't missed anything.
- //
- // If it is reasonably possible all codepaths containing PORTABILITY_ASSERT
- // should be compilable (e.g. functions should return NULL or something if
- // they are expected to return a value).
- //
- // The message in these two macros should not contain any keywords like TODO
- // or NYI. It should be just the brief description of the problem.
- #if defined(_TARGET_X86_)
- // Finished ports - compile-time errors
- #define PORTABILITY_WARNING(message) NEED_TO_PORT_THIS_ONE(NEED_TO_PORT_THIS_ONE)
- #define PORTABILITY_ASSERT(message) NEED_TO_PORT_THIS_ONE(NEED_TO_PORT_THIS_ONE)
- #else
- // Ports in progress - run-time asserts only
- #define PORTABILITY_WARNING(message)
- #define PORTABILITY_ASSERT(message) _ASSERTE(false && message)
- #endif
- #define UNREFERENCED_PARAMETER(P) (void)(P)
- #ifdef BIT64
- #define VALPTR(x) VAL64(x)
- #define GET_UNALIGNED_PTR(x) GET_UNALIGNED_64(x)
- #define GET_UNALIGNED_VALPTR(x) GET_UNALIGNED_VAL64(x)
- #define SET_UNALIGNED_PTR(p,x) SET_UNALIGNED_64(p,x)
- #define SET_UNALIGNED_VALPTR(p,x) SET_UNALIGNED_VAL64(p,x)
- #else
- #define VALPTR(x) VAL32(x)
- #define GET_UNALIGNED_PTR(x) GET_UNALIGNED_32(x)
- #define GET_UNALIGNED_VALPTR(x) GET_UNALIGNED_VAL32(x)
- #define SET_UNALIGNED_PTR(p,x) SET_UNALIGNED_32(p,x)
- #define SET_UNALIGNED_VALPTR(p,x) SET_UNALIGNED_VAL32(p,x)
- #endif
- #ifdef _TARGET_AMD64_
- #define RUNTIME_FUNCTION_INDIRECT 0x1
- #endif
- #define _ReturnAddress() __builtin_return_address(0)
- #ifdef PLATFORM_UNIX
- #define DIRECTORY_SEPARATOR_CHAR_A '/'
- #define DIRECTORY_SEPARATOR_CHAR_W W('/')
- #define DIRECTORY_SEPARATOR_STR_W W("/")
- #define PATH_SEPARATOR_CHAR_W W(':')
- #define PATH_SEPARATOR_STR_W W(":")
- #define VOLUME_SEPARATOR_CHAR_W W('/')
- #else // PLATFORM_UNIX
- #define DIRECTORY_SEPARATOR_CHAR_A '\\'
- #define DIRECTORY_SEPARATOR_CHAR_W W('\\')
- #define DIRECTORY_SEPARATOR_STR_W W("\\")
- #define PATH_SEPARATOR_CHAR_W W(';')
- #define PATH_SEPARATOR_STR_W W(";")
- #define VOLUME_SEPARATOR_CHAR_W W(':')
- #endif // PLATFORM_UNIX
- #ifndef IMAGE_IMPORT_DESC_FIELD
- #define IMAGE_IMPORT_DESC_FIELD(img, f) ((img).u.f)
- #endif
- #ifndef IMAGE_COR20_HEADER_FIELD
- #define IMAGE_COR20_HEADER_FIELD(obj, f) ((obj).f)
- #endif
- // copied from winnt.h
- #define PROCESSOR_ARCHITECTURE_INTEL 0
- #define PROCESSOR_ARCHITECTURE_MIPS 1
- #define PROCESSOR_ARCHITECTURE_ALPHA 2
- #define PROCESSOR_ARCHITECTURE_PPC 3
- #define PROCESSOR_ARCHITECTURE_SHX 4
- #define PROCESSOR_ARCHITECTURE_ARM 5
- #define PROCESSOR_ARCHITECTURE_IA64 6
- #define PROCESSOR_ARCHITECTURE_ALPHA64 7
- #define PROCESSOR_ARCHITECTURE_MSIL 8
- #define PROCESSOR_ARCHITECTURE_AMD64 9
- #define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
- #define PROCESSOR_ARCHITECTURE_NEUTRAL 11
- #define PROCESSOR_ARCHITECTURE_ARM64 12
- #define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
- //
- // JIT Debugging Info. This structure is defined to have constant size in
- // both the emulated and native environment.
- //
- typedef struct _JIT_DEBUG_INFO {
- DWORD dwSize;
- DWORD dwProcessorArchitecture;
- DWORD dwThreadID;
- DWORD dwReserved0;
- ULONG64 lpExceptionAddress;
- ULONG64 lpExceptionRecord;
- ULONG64 lpContextRecord;
- } JIT_DEBUG_INFO, *LPJIT_DEBUG_INFO;
- typedef JIT_DEBUG_INFO JIT_DEBUG_INFO32, *LPJIT_DEBUG_INFO32;
- typedef JIT_DEBUG_INFO JIT_DEBUG_INFO64, *LPJIT_DEBUG_INFO64;
- /******************* resources ***************************************/
- #define MAKEINTRESOURCEW(i) ((LPWSTR)((ULONG_PTR)((WORD)(i))))
- #define RT_RCDATA MAKEINTRESOURCE(10)
- #define RT_VERSION MAKEINTRESOURCE(16)
- /******************* SAFEARRAY ************************/
- #define FADF_VARIANT ( 0x800 )
- typedef struct tagSAFEARRAYBOUND
- {
- ULONG cElements;
- LONG lLbound;
- } SAFEARRAYBOUND;
- typedef struct tagSAFEARRAYBOUND *LPSAFEARRAYBOUND;
- typedef struct tagSAFEARRAY
- {
- USHORT cDims;
- USHORT fFeatures;
- ULONG cbElements;
- ULONG cLocks;
- PVOID pvData;
- SAFEARRAYBOUND rgsabound[ 1 ];
- } SAFEARRAY;
- typedef SAFEARRAY *LPSAFEARRAY;
- STDAPI_(SAFEARRAY *) SafeArrayCreateVector(VARTYPE vt, LONG lLbound, ULONG cElements);
- STDAPI_(UINT) SafeArrayGetDim(SAFEARRAY * psa);
- STDAPI SafeArrayGetElement(SAFEARRAY * psa, LONG * rgIndices, void * pv);
- STDAPI SafeArrayGetLBound(SAFEARRAY * psa, UINT nDim, LONG * plLbound);
- STDAPI SafeArrayGetUBound(SAFEARRAY * psa, UINT nDim, LONG * plUbound);
- STDAPI SafeArrayGetVartype(SAFEARRAY * psa, VARTYPE * pvt);
- STDAPI SafeArrayPutElement(SAFEARRAY * psa, LONG * rgIndices, void * pv);
- STDAPI SafeArrayDestroy(SAFEARRAY * psa);
- EXTERN_C void * _stdcall _lfind(const void *, const void *, unsigned int *, unsigned int,
- int (__cdecl *)(const void *, const void *));
- /*<TODO>****************** clean this up ***********************</TODO>*/
- interface IDispatch;
- interface ITypeInfo;
- interface ITypeLib;
- interface IMoniker;
- typedef VOID (WINAPI *LPOVERLAPPED_COMPLETION_ROUTINE)(
- DWORD dwErrorCode,
- DWORD dwNumberOfBytesTransfered,
- LPVOID lpOverlapped);
- //
- // Debug APIs
- //
- #define EXCEPTION_DEBUG_EVENT 1
- #define CREATE_THREAD_DEBUG_EVENT 2
- #define CREATE_PROCESS_DEBUG_EVENT 3
- #define EXIT_THREAD_DEBUG_EVENT 4
- #define EXIT_PROCESS_DEBUG_EVENT 5
- #define LOAD_DLL_DEBUG_EVENT 6
- #define UNLOAD_DLL_DEBUG_EVENT 7
- #define OUTPUT_DEBUG_STRING_EVENT 8
- #define RIP_EVENT 9
- typedef struct _EXCEPTION_DEBUG_INFO {
- EXCEPTION_RECORD ExceptionRecord;
- DWORD dwFirstChance;
- } EXCEPTION_DEBUG_INFO, *LPEXCEPTION_DEBUG_INFO;
- typedef struct _CREATE_THREAD_DEBUG_INFO {
- HANDLE hThread;
- LPVOID lpThreadLocalBase;
- LPTHREAD_START_ROUTINE lpStartAddress;
- } CREATE_THREAD_DEBUG_INFO, *LPCREATE_THREAD_DEBUG_INFO;
- typedef struct _CREATE_PROCESS_DEBUG_INFO {
- HANDLE hFile;
- HANDLE hProcess;
- HANDLE hThread;
- LPVOID lpBaseOfImage;
- DWORD dwDebugInfoFileOffset;
- DWORD nDebugInfoSize;
- LPVOID lpThreadLocalBase;
- LPTHREAD_START_ROUTINE lpStartAddress;
- LPVOID lpImageName;
- WORD fUnicode;
- } CREATE_PROCESS_DEBUG_INFO, *LPCREATE_PROCESS_DEBUG_INFO;
- typedef struct _EXIT_THREAD_DEBUG_INFO {
- DWORD dwExitCode;
- } EXIT_THREAD_DEBUG_INFO, *LPEXIT_THREAD_DEBUG_INFO;
- typedef struct _EXIT_PROCESS_DEBUG_INFO {
- DWORD dwExitCode;
- } EXIT_PROCESS_DEBUG_INFO, *LPEXIT_PROCESS_DEBUG_INFO;
- typedef struct _LOAD_DLL_DEBUG_INFO {
- HANDLE hFile;
- LPVOID lpBaseOfDll;
- DWORD dwDebugInfoFileOffset;
- DWORD nDebugInfoSize;
- LPVOID lpImageName;
- WORD fUnicode;
- } LOAD_DLL_DEBUG_INFO, *LPLOAD_DLL_DEBUG_INFO;
- typedef struct _UNLOAD_DLL_DEBUG_INFO {
- LPVOID lpBaseOfDll;
- } UNLOAD_DLL_DEBUG_INFO, *LPUNLOAD_DLL_DEBUG_INFO;
- typedef struct _OUTPUT_DEBUG_STRING_INFO {
- LPSTR lpDebugStringData;
- WORD fUnicode;
- WORD nDebugStringLength;
- } OUTPUT_DEBUG_STRING_INFO, *LPOUTPUT_DEBUG_STRING_INFO;
- typedef struct _RIP_INFO {
- DWORD dwError;
- DWORD dwType;
- } RIP_INFO, *LPRIP_INFO;
- typedef struct _DEBUG_EVENT {
- DWORD dwDebugEventCode;
- DWORD dwProcessId;
- DWORD dwThreadId;
- union {
- EXCEPTION_DEBUG_INFO Exception;
- CREATE_THREAD_DEBUG_INFO CreateThread;
- CREATE_PROCESS_DEBUG_INFO CreateProcessInfo;
- EXIT_THREAD_DEBUG_INFO ExitThread;
- EXIT_PROCESS_DEBUG_INFO ExitProcess;
- LOAD_DLL_DEBUG_INFO LoadDll;
- UNLOAD_DLL_DEBUG_INFO UnloadDll;
- OUTPUT_DEBUG_STRING_INFO DebugString;
- RIP_INFO RipInfo;
- } u;
- } DEBUG_EVENT, *LPDEBUG_EVENT;
- //
- // Define dynamic function table entry.
- //
- typedef
- PRUNTIME_FUNCTION
- GET_RUNTIME_FUNCTION_CALLBACK (
- DWORD64 ControlPc,
- PVOID Context
- );
- typedef GET_RUNTIME_FUNCTION_CALLBACK *PGET_RUNTIME_FUNCTION_CALLBACK;
- typedef
- DWORD
- OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK (
- HANDLE Process,
- PVOID TableAddress,
- PDWORD Entries,
- PRUNTIME_FUNCTION* Functions
- );
- typedef OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK *POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK;
- #define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME \
- "OutOfProcessFunctionTableCallback"
- #if defined(FEATURE_PAL_SXS)
- // #if !defined(_TARGET_MAC64)
- // typedef LONG (*PEXCEPTION_ROUTINE)(
- // IN PEXCEPTION_POINTERS pExceptionPointers,
- // IN LPVOID lpvParam);
- // #define DISPATCHER_CONTEXT LPVOID
- // #else // defined(_TARGET_MAC64)
- //
- // Define unwind history table structure.
- //
- #define UNWIND_HISTORY_TABLE_SIZE 12
- typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
- DWORD64 ImageBase;
- PRUNTIME_FUNCTION FunctionEntry;
- } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
- typedef struct _UNWIND_HISTORY_TABLE {
- DWORD Count;
- BYTE LocalHint;
- BYTE GlobalHint;
- BYTE Search;
- BYTE Once;
- DWORD64 LowAddress;
- DWORD64 HighAddress;
- UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
- } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
- typedef
- EXCEPTION_DISPOSITION
- (*PEXCEPTION_ROUTINE) (
- PEXCEPTION_RECORD ExceptionRecord,
- ULONG64 EstablisherFrame,
- PCONTEXT ContextRecord,
- PVOID DispatcherContext
- );
- #if defined(_ARM_)
- typedef struct _DISPATCHER_CONTEXT {
- DWORD ControlPc;
- DWORD ImageBase;
- PRUNTIME_FUNCTION FunctionEntry;
- DWORD EstablisherFrame;
- DWORD TargetPc;
- PCONTEXT ContextRecord;
- PEXCEPTION_ROUTINE LanguageHandler;
- PVOID HandlerData;
- PUNWIND_HISTORY_TABLE HistoryTable;
- DWORD ScopeIndex;
- BOOLEAN ControlPcIsUnwound;
- PBYTE NonVolatileRegisters;
- DWORD Reserved;
- } DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
- #elif defined(_ARM64_)
- typedef struct _DISPATCHER_CONTEXT {
- ULONG64 ControlPc;
- ULONG64 ImageBase;
- PRUNTIME_FUNCTION FunctionEntry;
- ULONG64 EstablisherFrame;
- ULONG64 TargetPc;
- PCONTEXT ContextRecord;
- PEXCEPTION_ROUTINE LanguageHandler;
- PVOID HandlerData;
- PUNWIND_HISTORY_TABLE HistoryTable;
- ULONG64 ScopeIndex;
- BOOLEAN ControlPcIsUnwound;
- PBYTE NonVolatileRegisters;
- ULONG64 Reserved;
- } DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
- #else
- typedef struct _DISPATCHER_CONTEXT {
- ULONG64 ControlPc;
- ULONG64 ImageBase;
- PRUNTIME_FUNCTION FunctionEntry;
- ULONG64 EstablisherFrame;
- ULONG64 TargetIp;
- PCONTEXT ContextRecord;
- PEXCEPTION_ROUTINE LanguageHandler;
- PVOID HandlerData;
- PUNWIND_HISTORY_TABLE HistoryTable;
- } DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
- #endif
- // #endif // !defined(_TARGET_MAC64)
- typedef DISPATCHER_CONTEXT *PDISPATCHER_CONTEXT;
- #define ExceptionContinueSearch EXCEPTION_CONTINUE_SEARCH
- #define ExceptionStackUnwind EXCEPTION_EXECUTE_HANDLER
- #define ExceptionContinueExecution EXCEPTION_CONTINUE_EXECUTION
- #endif // FEATURE_PAL_SXS
- typedef struct _EXCEPTION_REGISTRATION_RECORD EXCEPTION_REGISTRATION_RECORD;
- typedef EXCEPTION_REGISTRATION_RECORD *PEXCEPTION_REGISTRATION_RECORD;
- typedef LPVOID HKEY;
- typedef LPVOID PACL;
- typedef LPVOID LPBC;
- typedef LPVOID PSECURITY_DESCRIPTOR;
- typedef struct _EXCEPTION_RECORD64 {
- DWORD ExceptionCode;
- ULONG ExceptionFlags;
- ULONG64 ExceptionRecord;
- ULONG64 ExceptionAddress;
- ULONG NumberParameters;
- ULONG __unusedAlignment;
- ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
- } EXCEPTION_RECORD64, *PEXCEPTION_RECORD64;
- typedef LONG (WINAPI *PTOP_LEVEL_EXCEPTION_FILTER)(
- IN struct _EXCEPTION_POINTERS *ExceptionInfo
- );
- typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;
- /******************* ntdef ************************************/
- #ifndef ANYSIZE_ARRAY
- #define ANYSIZE_ARRAY 1 // winnt
- #endif
- /******************* winnt ************************************/
- typedef struct LIST_ENTRY32 {
- ULONG Flink;
- ULONG Blink;
- } LIST_ENTRY32;
- typedef LIST_ENTRY32 *PLIST_ENTRY32;
- typedef struct LIST_ENTRY64 {
- ULONGLONG Flink;
- ULONGLONG Blink;
- } LIST_ENTRY64;
- typedef LIST_ENTRY64 *PLIST_ENTRY64;
- /******************** PAL RT APIs *******************************/
- typedef struct _HSATELLITE *HSATELLITE;
- EXTERN_C HSATELLITE PALAPI PAL_LoadSatelliteResourceW(LPCWSTR SatelliteResourceFileName);
- EXTERN_C HSATELLITE PALAPI PAL_LoadSatelliteResourceA(LPCSTR SatelliteResourceFileName);
- EXTERN_C BOOL PALAPI PAL_FreeSatelliteResource(HSATELLITE SatelliteResource);
- EXTERN_C UINT PALAPI PAL_LoadSatelliteStringW(HSATELLITE SatelliteResource,
- UINT uID,
- LPWSTR lpBuffer,
- UINT nBufferMax);
- EXTERN_C UINT PALAPI PAL_LoadSatelliteStringA(HSATELLITE SatelliteResource,
- UINT uID,
- LPSTR lpBuffer,
- UINT nBufferMax);
- EXTERN_C HRESULT PALAPI PAL_CoCreateInstance(REFCLSID rclsid,
- REFIID riid,
- void **ppv);
- // So we can have CoCreateInstance in most of the code base,
- // instead of spreading around of if'def FEATURE_PALs for PAL_CoCreateInstance.
- #define CoCreateInstance(rclsid, pUnkOuter, dwClsContext, riid, ppv) PAL_CoCreateInstance(rclsid, riid, ppv)
- /************** verrsrc.h ************************************/
- /* ----- VS_VERSION.dwFileFlags ----- */
- #define VS_FF_DEBUG 0x00000001L
- #define VS_FF_PRERELEASE 0x00000002L
- #define VS_FF_PATCHED 0x00000004L
- #define VS_FF_PRIVATEBUILD 0x00000008L
- #define VS_FF_INFOINFERRED 0x00000010L
- #define VS_FF_SPECIALBUILD 0x00000020L
- /* ----- Types and structures ----- */
- typedef struct tagVS_FIXEDFILEINFO
- {
- DWORD dwSignature; /* e.g. 0xfeef04bd */
- DWORD dwStrucVersion; /* e.g. 0x00000042 = "0.42" */
- DWORD dwFileVersionMS; /* e.g. 0x00030075 = "3.75" */
- DWORD dwFileVersionLS; /* e.g. 0x00000031 = "0.31" */
- DWORD dwProductVersionMS; /* e.g. 0x00030010 = "3.10" */
- DWORD dwProductVersionLS; /* e.g. 0x00000031 = "0.31" */
- DWORD dwFileFlagsMask; /* = 0x3F for version "0.42" */
- DWORD dwFileFlags; /* e.g. VFF_DEBUG | VFF_PRERELEASE */
- DWORD dwFileOS; /* e.g. VOS_DOS_WINDOWS16 */
- DWORD dwFileType; /* e.g. VFT_DRIVER */
- DWORD dwFileSubtype; /* e.g. VFT2_DRV_KEYBOARD */
- DWORD dwFileDateMS; /* e.g. 0 */
- DWORD dwFileDateLS; /* e.g. 0 */
- } VS_FIXEDFILEINFO;
- /************** Byte swapping & unaligned access ******************/
- #include <pal_endian.h>
- /******************** external includes *************************/
- #include "ntimage.h"
- #ifndef PAL_STDCPP_COMPAT
- // #include "cpp/ccombstr.h"
- // #include "cpp/cstring.h"
- #endif // !PAL_STDCPP_COMPAT
- // #include "sscli_version.h"
- #endif // RC_INVOKED
- #endif // __PALRT_H__
|