213 lines
6 KiB
C
213 lines
6 KiB
C
/*
|
||
* Copyright © Microsoft Corporation
|
||
*
|
||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||
* copy of this software and associated documentation files (the "Software"),
|
||
* to deal in the Software without restriction, including without limitation
|
||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||
* and/or sell copies of the Software, and to permit persons to whom the
|
||
* Software is furnished to do so, subject to the following conditions:
|
||
*
|
||
* The above copyright notice and this permission notice (including the next
|
||
* paragraph) shall be included in all copies or substantial portions of the
|
||
* Software.
|
||
*
|
||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||
* IN THE SOFTWARE.
|
||
*/
|
||
|
||
#ifndef _COMPAT_WIN32_H_
|
||
#define _COMPAT_WIN32_H_
|
||
|
||
#include <windows.h>
|
||
#include <winsock.h>
|
||
#include <io.h>
|
||
#include <time.h>
|
||
|
||
// Include stdlib.h here to make sure we
|
||
// always replace MSVC getenv definition
|
||
// with the macro / _getenv inline below
|
||
#include <stdlib.h>
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
#define F_OK 0
|
||
#define RTLD_NOW 0
|
||
#define RTLD_GLOBAL 0
|
||
|
||
#ifndef NTSTATUS
|
||
typedef LONG NTSTATUS;
|
||
#define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
|
||
#define STATUS_BUFFER_TOO_SMALL ((NTSTATUS)0xC0000023)
|
||
#define NT_SUCCESS(status) (((NTSTATUS)(status)) >= 0)
|
||
#endif
|
||
|
||
typedef unsigned int __uid_t;
|
||
|
||
#if _MSC_VER
|
||
#define getenv _getenv
|
||
#define secure_getenv _getenv
|
||
#define HAVE_SECURE_GETENV
|
||
inline char* _getenv(const char *varname)
|
||
{
|
||
static char _getenv_buf[32767];
|
||
return GetEnvironmentVariableA(varname, &_getenv_buf[0], sizeof(_getenv_buf)) ? &_getenv_buf[0] : NULL;
|
||
}
|
||
#endif
|
||
|
||
#ifdef _MSC_VER
|
||
inline char* strtok_r(char *s, const char *delim, char **save_ptr)
|
||
{
|
||
return strtok_s(s, delim, save_ptr);
|
||
}
|
||
#endif
|
||
|
||
inline void* dlopen(const char *file, int mode)
|
||
{
|
||
return LoadLibrary(file);
|
||
}
|
||
|
||
inline int dlclose(void *handle)
|
||
{
|
||
return FreeLibrary(handle);
|
||
}
|
||
|
||
inline void *dlsym(void *handle, const char *name)
|
||
{
|
||
return GetProcAddress(handle, name);
|
||
}
|
||
|
||
inline static char* dlerror()
|
||
{
|
||
static char last_err_string[512];
|
||
memset(last_err_string, '\0', 512);
|
||
FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(),
|
||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), last_err_string, (512 - 1), NULL);
|
||
return last_err_string;
|
||
}
|
||
|
||
inline __uid_t geteuid()
|
||
{
|
||
return 0;
|
||
};
|
||
|
||
inline __uid_t getuid()
|
||
{
|
||
return 0;
|
||
};
|
||
|
||
typedef DWORD pid_t;
|
||
typedef CRITICAL_SECTION pthread_mutex_t;
|
||
|
||
inline void pthread_mutex_lock(pthread_mutex_t* a)
|
||
{
|
||
EnterCriticalSection(a);
|
||
}
|
||
|
||
inline void pthread_mutex_unlock(pthread_mutex_t* a)
|
||
{
|
||
LeaveCriticalSection(a);
|
||
}
|
||
|
||
inline void pthread_mutex_init(pthread_mutex_t* a, void* attr)
|
||
{
|
||
InitializeCriticalSection(a);
|
||
}
|
||
|
||
inline void pthread_mutex_destroy(pthread_mutex_t* a)
|
||
{
|
||
DeleteCriticalSection(a);
|
||
}
|
||
|
||
inline int gettimeofday(struct timeval *tv, struct timezone* tz)
|
||
{
|
||
SYSTEMTIME st;
|
||
GetSystemTime(&st);
|
||
tv->tv_sec = st.wSecond;
|
||
tv->tv_usec = st.wMilliseconds * 1000; /* milli to micro sec */
|
||
return 0;
|
||
}
|
||
|
||
#ifdef _MSC_VER
|
||
#include <d3dkmthk.h>
|
||
#include <d3dukmdt.h>
|
||
#else
|
||
//
|
||
// DDI level handle that represents a kernel mode object (allocation, device, etc)
|
||
//
|
||
typedef UINT D3DKMT_HANDLE;
|
||
|
||
typedef struct _D3DKMT_CLOSEADAPTER {
|
||
D3DKMT_HANDLE hAdapter; // in: adapter handle
|
||
} D3DKMT_CLOSEADAPTER;
|
||
|
||
typedef struct _D3DKMT_OPENADAPTERFROMLUID {
|
||
LUID AdapterLuid;
|
||
D3DKMT_HANDLE hAdapter;
|
||
} D3DKMT_OPENADAPTERFROMLUID;
|
||
|
||
typedef enum _KMTQUERYADAPTERINFOTYPE {
|
||
KMTQAITYPE_QUERYREGISTRY = 48,
|
||
} KMTQUERYADAPTERINFOTYPE;
|
||
|
||
typedef struct _D3DKMT_QUERYADAPTERINFO {
|
||
D3DKMT_HANDLE hAdapter;
|
||
KMTQUERYADAPTERINFOTYPE Type;
|
||
VOID* pPrivateDriverData;
|
||
UINT PrivateDriverDataSize;
|
||
} D3DKMT_QUERYADAPTERINFO;
|
||
|
||
typedef struct _D3DDDI_QUERYREGISTRY_FLAGS {
|
||
union {
|
||
struct {
|
||
UINT TranslatePath : 1;
|
||
UINT MutableValue : 1;
|
||
UINT Reserved : 30;
|
||
};
|
||
UINT Value;
|
||
};
|
||
} D3DDDI_QUERYREGISTRY_FLAGS;
|
||
|
||
typedef enum _D3DDDI_QUERYREGISTRY_TYPE {
|
||
D3DDDI_QUERYREGISTRY_ADAPTERKEY = 1,
|
||
} D3DDDI_QUERYREGISTRY_TYPE;
|
||
|
||
typedef enum _D3DDDI_QUERYREGISTRY_STATUS {
|
||
D3DDDI_QUERYREGISTRY_STATUS_SUCCESS = 0,
|
||
D3DDDI_QUERYREGISTRY_STATUS_BUFFER_OVERFLOW = 1,
|
||
} D3DDDI_QUERYREGISTRY_STATUS;
|
||
|
||
typedef struct _D3DDDI_QUERYREGISTRY_INFO {
|
||
D3DDDI_QUERYREGISTRY_TYPE QueryType; // In
|
||
D3DDDI_QUERYREGISTRY_FLAGS QueryFlags; // In
|
||
WCHAR ValueName[MAX_PATH]; // In
|
||
ULONG ValueType; // In
|
||
ULONG PhysicalAdapterIndex; // In
|
||
ULONG OutputValueSize; // Out. Number of bytes written to the output value or required in case of D3DDDI_QUERYREGISTRY_STATUS_BUFFER_OVERFLOW.
|
||
D3DDDI_QUERYREGISTRY_STATUS Status; // Out
|
||
union {
|
||
DWORD OutputDword; // Out
|
||
UINT64 OutputQword; // Out
|
||
WCHAR OutputString[1]; // Out. Dynamic array
|
||
BYTE OutputBinary[1]; // Out. Dynamic array
|
||
};
|
||
} D3DDDI_QUERYREGISTRY_INFO;
|
||
|
||
typedef _Check_return_ NTSTATUS(APIENTRY *PFND3DKMT_CLOSEADAPTER)(_In_ CONST D3DKMT_CLOSEADAPTER*);
|
||
typedef _Check_return_ NTSTATUS(APIENTRY *PFND3DKMT_OPENADAPTERFROMLUID)(_Inout_ D3DKMT_OPENADAPTERFROMLUID*);
|
||
typedef _Check_return_ NTSTATUS(APIENTRY *PFND3DKMT_QUERYADAPTERINFO)(_Inout_ CONST D3DKMT_QUERYADAPTERINFO*);
|
||
|
||
#endif
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /* _COMPAT_WIN32_H_ */
|