summaryrefslogtreecommitdiffstats
path: root/third_party/rust/winapi/src/um/wct.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/winapi/src/um/wct.rs')
-rw-r--r--third_party/rust/winapi/src/um/wct.rs114
1 files changed, 114 insertions, 0 deletions
diff --git a/third_party/rust/winapi/src/um/wct.rs b/third_party/rust/winapi/src/um/wct.rs
new file mode 100644
index 0000000000..0c3fae910e
--- /dev/null
+++ b/third_party/rust/winapi/src/um/wct.rs
@@ -0,0 +1,114 @@
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// All files in the project carrying such notice may not be copied, modified, or distributed
+// except according to those terms.
+use ctypes::c_int;
+use shared::basetsd::{DWORD_PTR, SIZE_T};
+use shared::guiddef::GUID;
+use shared::minwindef::{BOOL, DWORD, LPBOOL, LPDWORD, PULONG};
+use um::winnt::{HRESULT, LARGE_INTEGER, WCHAR};
+ENUM!{enum WCT_OBJECT_TYPE {
+ WctCriticalSectionType = 1,
+ WctSendMessageType,
+ WctMutexType,
+ WctAlpcType,
+ WctComType,
+ WctThreadWaitType,
+ WctProcessWaitType,
+ WctThreadType,
+ WctComActivationType,
+ WctUnknownType,
+ WctSocketIoType,
+ WctSmbIoType,
+ WctMaxType,
+}}
+ENUM!{enum WCT_OBJECT_STATUS {
+ WctStatusNoAccess = 1,
+ WctStatusRunning,
+ WctStatusBlocked,
+ WctStatusPidOnly,
+ WctStatusPidOnlyRpcss,
+ WctStatusOwned,
+ WctStatusNotOwned,
+ WctStatusAbandoned,
+ WctStatusUnknown,
+ WctStatusError,
+ WctStatusMax,
+}}
+pub const WCT_MAX_NODE_COUNT: SIZE_T = 16;
+pub const WCT_OBJNAME_LENGTH: SIZE_T = 128;
+STRUCT!{struct WAITCHAIN_NODE_INFO_LOCK_OBJECT {
+ ObjectName: [WCHAR; WCT_OBJNAME_LENGTH],
+ Timeout: LARGE_INTEGER,
+ Alertable: BOOL,
+}}
+STRUCT!{struct WAITCHAIN_NODE_INFO_THREAD_OBJECT {
+ ProcessId: DWORD,
+ ThreadId: DWORD,
+ WaitTime: DWORD,
+ ContextSwitches: DWORD,
+}}
+UNION!{union WAITCHAIN_NODE_INFO_u {
+ [u64; 34],
+ LockObject LockObject_mut: WAITCHAIN_NODE_INFO_LOCK_OBJECT,
+ ThreadObject ThreadObject_mut: WAITCHAIN_NODE_INFO_THREAD_OBJECT,
+}}
+STRUCT!{struct WAITCHAIN_NODE_INFO {
+ ObjectType: WCT_OBJECT_TYPE,
+ ObjectStatus: WCT_OBJECT_STATUS,
+ u: WAITCHAIN_NODE_INFO_u,
+}}
+pub type PWAITCHAIN_NODE_INFO = *mut WAITCHAIN_NODE_INFO;
+DECLARE_HANDLE!{HWCT, HWCT__}
+FN!{cdecl PWAITCHAINCALLBACK(
+ WctHandle: HWCT,
+ Context: DWORD_PTR,
+ CallbackStatus: DWORD,
+ NodeCount: LPDWORD,
+ NodeInfoArray: PWAITCHAIN_NODE_INFO,
+ IsCycle: LPBOOL,
+) -> ()}
+pub const WCT_ASYNC_OPEN_FLAG: DWORD = 1;
+pub const WCTP_OPEN_ALL_FLAGS: DWORD = WCT_ASYNC_OPEN_FLAG;
+extern "system" {
+ pub fn OpenThreadWaitChainSession(
+ Flags: DWORD,
+ callback: PWAITCHAINCALLBACK,
+ ) -> HWCT;
+ pub fn CloseThreadWaitChainSession(
+ WctHandle: HWCT,
+ );
+}
+pub const WCT_OUT_OF_PROC_FLAG: DWORD = 0x1;
+pub const WCT_OUT_OF_PROC_COM_FLAG: DWORD = 0x2;
+pub const WCT_OUT_OF_PROC_CS_FLAG: DWORD = 0x4;
+pub const WCT_NETWORK_IO_FLAG: DWORD = 0x8;
+pub const WCTP_GETINFO_ALL_FLAGS: DWORD = WCT_OUT_OF_PROC_FLAG | WCT_OUT_OF_PROC_COM_FLAG
+ | WCT_OUT_OF_PROC_CS_FLAG;
+extern "system" {
+ pub fn GetThreadWaitChain(
+ WctHandle: HWCT,
+ Context: DWORD_PTR,
+ Flags: DWORD,
+ ThreadId: DWORD,
+ NodeCount: LPDWORD,
+ NodeInfoArray: PWAITCHAIN_NODE_INFO,
+ IsCycle: LPBOOL,
+ ) -> BOOL;
+}
+FN!{cdecl PCOGETCALLSTATE(
+ c_int,
+ PULONG,
+) -> HRESULT}
+FN!{cdecl PCOGETACTIVATIONSTATE(
+ GUID,
+ DWORD,
+ *mut DWORD,
+) -> HRESULT}
+extern "system" {
+ pub fn RegisterWaitChainCOMCallback(
+ CallStateCallback: PCOGETCALLSTATE,
+ ActivationStateCallback: PCOGETACTIVATIONSTATE,
+ );
+}