📄 threadapi.odl
字号:
[
uuid(F2904140-C83D-11D3-BC25-D41203C10000),
helpstring("VBoost: API declares used for threading"),
lcid(0x0),
version(1.0)
]
library ThreadingAPIs
{
importlib("stdole2.tlb");
importlib("VBoostTypes6.olb");
typedef VBGUID* REFGUID;
typedef VBGUID* REFIID;
typedef VBGUID* REFCLSID;
typedef enum
{
PM_NOREMOVE = 0,
PM_REMOVE = 1,
PM_NOYIELD = 2
} PMOptions;
typedef enum
{
CLSCTX_INPROC_SERVER = 1,
CLSCTX_INPROC_HANDLER = 2,
CLSCTX_LOCAL_SERVER = 4,
CLSCTX_REMOTE_SERVER = 16
} CLSCTX;
typedef struct
{
long DebugInfo;
long LockCount;
long RecursionCount;
long OwningThread;
long LockSemaphore;
long SpinCount;
} CRITICAL_SECTION;
typedef [public] long LPCRITICAL_SECTION;
typedef struct
{
HWND hWnd;
UINT Message;
WPARAM wParam;
LPARAM lParam;
DWORD dwTime;
long ptX;
long ptY;
} MSG;
interface IMessageFilter;
[dllname("ole32.dll")]
module Ole32
{
[entry("CoMarshalInterThreadInterfaceInStream")] HRESULT CoMarshalInterThreadInterfaceInStream([in] REFIID riid, [in] stdole.IUnknown* pUnk, [out,retval] long* ppStm);
[entry("CoGetInterfaceAndReleaseStream")] HRESULT CoGetInterfaceAndReleaseStream([in] long pStm, [in] REFIID riid, [out,retval] stdole.IUnknown** ppUnk);
[entry("CoInitialize")] long CoInitialize ([in] long pvReserved);
[entry("CoUninitialize")] long CoUninitialize ();
[entry("CoCreateInstance")] long CoCreateInstance([in] REFCLSID clsid, [in] IUnknown* pUnkOuter, [in] CLSCTX dwClsContext, [in] REFIID riid, [out] stdole.IUnknown** pvObj);
[entry("CoRegisterMessageFilter")] HRESULT CoRegisterMessageFilter([in] IMessageFilter* pNewMessageFilter, [out,retval] IMessageFilter** ppOldMessageFilter);
}
[dllname("kernel32")]
module Kernel32
{
const long CREATE_SUSPENDED = 0x00000004;
const long INFINITE = 0xFFFFFFFF;
const long DUPLICATE_SAME_ACCESS = 0x00000002;
const long STILL_ACTIVE = 0x00000103;
[entry("WaitForSingleObject")] long WaitForSingleObject ([in] HANDLE hHandle, [in] long dwMilliseconds);
[entry("CreateEventA"), usesgetlasterror] HANDLE CreateEvent ([in] long lpEventAttributes, [in] long bManualReset, [in] long bInitialState, [in] LPSTR lpName);
[entry("CloseHandle")] long CloseHandle ([in] HANDLE hOjbect);
[entry("PulseEvent")] long PulseEvent ([in] HANDLE hEvent);
[entry("SetEvent")] long SetEvent ([in] HANDLE hEvent);
[entry("ResetEvent")] long ResetEvent ([in] HANDLE hEvent);
[entry("ResumeThread")] long ResumeThread ([in] HANDLE hThread);
[entry("SuspendThread")] long SuspendThread ([in] HANDLE hThread);
[entry("InterlockedIncrement")] long InterlockedIncrement([in] long pLong);
[entry("InterlockedDecrement")] long InterlockedDecrement([in] long pLong);
[entry("WaitForMultipleObjects")] long WaitForMultipleObjects ([in] long nCount, [in,out] HANDLE* lpHandles, [in] BOOL bWaitAll, [in] long dwMilliseconds);
[entry("GetCurrentThreadId")] long GetCurrentThreadId ();
[entry("GetCurrentProcessId")] long GetCurrentProcessId ();
[entry("GetCurrentProcess")] HANDLE GetCurrentProcess();
[entry("CreateThread")] HANDLE CreateThread ([in] long lpSecurityAttributes, [in] long dwStackSize, [in] long lpStartAddress, [in] long lpParameter, [in] long dwCreationFlags, [in,out] long* lpThreadId);
[entry("Sleep")] void Sleep([in] long dwMilliSeconds);
[entry("InitializeCriticalSection")] void InitializeCriticalSection([in] LPCRITICAL_SECTION lpCriticalSection);
[entry("DeleteCriticalSection")] void DeleteCriticalSection([in] LPCRITICAL_SECTION lpCriticalSection);
[entry("EnterCriticalSection")] void EnterCriticalSection([in] LPCRITICAL_SECTION lpCriticalSection);
[entry("LeaveCriticalSection")] void LeaveCriticalSection([in] LPCRITICAL_SECTION lpCriticalSection);
[entry("DuplicateHandle")] BOOL DuplicateHandle([in] HANDLE hSourceProcessHandle, [in] HANDLE hSourceHandle, [in] HANDLE hTargetProcessHandle, [out] HANDLE* lpTargetHandle, [in,defaultvalue(0)] DWORD dwDesiredAccess, [in, defaultvalue(0)] BOOL bInheritHandle, [in,defaultvalue(2)] DWORD dwOptions);
[entry("GetExitCodeThread")]BOOL GetExitCodeThread([in] HANDLE hThread, [out] DWORD *lpExitCode);
//[entry("OutputDebugStringW")] void ODS([in] LPWSTR lpOutputString);
}
[dllname("user32")]
module User32
{
[entry("PeekMessageA")] BOOL PeekMessage([in] MSG* lpMsg, [in] HWND hWnd, [in] UINT wMsgFilterMin, [in] UINT wMsgFilterMax, [in] PMOptions wRemoveMsg);
[entry("TranslateMessage")] BOOL TranslateMessage([in] MSG* lpMsg);
[entry("DispatchMessageA")] long DispatchMessage([in] MSG* lpMsg);
[entry("EnumThreadWindows")] BOOL EnumThreadWindows([in] DWORD dwThreadId, [in] long lpfn, [in] LPARAM lParam);
[entry("GetClassNameA")] long GetClassNameA([in] HWND hWnd, [in] LPSTR lpClassName, [in]long nMaxCount);
[entry("GetClassNameW")] long GetClassNameW([in] HWND hWnd, [in] LPWSTR lpClassName, [in]long nMaxCount);
[entry("SetTimer")] UINT SetTimer([in] HWND hWnd, [in] UINT nIDEvent, [in] UINT uEleapse, [in] long lpTimerFunc);
[entry("KillTimer")] BOOL KillTimer([in] HWND hWnd, [in] UINT nIDEvent);
};
typedef enum
{
CALLTYPE_TOPLEVEL = 1,
CALLTYPE_NESTED = 2,
CALLTYPE_ASYNC = 3,
CALLTYPE_TOPLEVEL_CALLPENDING = 4,
CALLTYPE_ASYNC_CALLPENDING = 5
} CALLTYPE;
typedef enum
{
SERVERCALL_ISHANDLED = 0,
SERVERCALL_REJECTED = 1,
SERVERCALL_RETRYLATER = 2
} SERVERCALL;
typedef enum
{
PENDINGTYPE_TOPLEVEL = 1,
PENDINGTYPE_NESTED = 2
} PENDINGTYPE;
typedef enum
{
PENDINGMSG_CANCELCALL = 0,
PENDINGMSG_WAITNOPROCESS = 1,
PENDINGMSG_WAITDEFPROCESS = 2
} PENDINGMSG;
typedef struct
{
stdole.IUnknown* pUnk;
IID iid;
WORD wMethod;
} INTERFACEINFO;
[
uuid(00000016-0000-0000-C000-000000000046), odl
]
interface IMessageFilter : IUnknown
{
SERVERCALL HandleInComingCall([in] CALLTYPE dwCallType, [in] HTASK htaskCaller, [in] DWORD dwTickCount, [in] INTERFACEINFO* lpInterfaceInfo);
DWORD RetryRejectedCall([in] HTASK htaskCallee, [in] DWORD dwTickCount, [in] SERVERCALL dwRejectType);
PENDINGMSG MessagePending([in] HTASK htaskCallee, [in] DWORD dwTickCount, [in] PENDINGTYPE dwPendingType);
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -