ghc-dup: 51764dc5df16053b8a7690dbc194c4ce1dec0c4f
1: {-# LANGUAGE CPP, ForeignFunctionInterface #-}
2: module WinCBindings where
3:
4: #if defined(mingw32_HOST_OS)
5:
6: import Foreign
7: import System.Win32.File
8: import System.Win32.Types
9:
10: #include <windows.h>
11:
12: type LPPROCESS_INFORMATION = Ptr PROCESS_INFORMATION
13: data PROCESS_INFORMATION = PROCESS_INFORMATION
14: { piProcess :: HANDLE
15: , piThread :: HANDLE
16: , piProcessId :: DWORD
17: , piThreadId :: DWORD
18: } deriving Show
19:
20: instance Storable PROCESS_INFORMATION where
21: sizeOf = const #size PROCESS_INFORMATION
22: alignment = sizeOf
23: poke buf pi = do
24: (#poke PROCESS_INFORMATION, hProcess) buf (piProcess pi)
25: (#poke PROCESS_INFORMATION, hThread) buf (piThread pi)
26: (#poke PROCESS_INFORMATION, dwProcessId) buf (piProcessId pi)
27: (#poke PROCESS_INFORMATION, dwThreadId) buf (piThreadId pi)
28:
29: peek buf = do
30: vhProcess <- (#peek PROCESS_INFORMATION, hProcess) buf
31: vhThread <- (#peek PROCESS_INFORMATION, hThread) buf
32: vdwProcessId <- (#peek PROCESS_INFORMATION, dwProcessId) buf
33: vdwThreadId <- (#peek PROCESS_INFORMATION, dwThreadId) buf
34: return $ PROCESS_INFORMATION {
35: piProcess = vhProcess,
36: piThread = vhThread,
37: piProcessId = vdwProcessId,
38: piThreadId = vdwThreadId}
39:
40: type LPSTARTUPINFO = Ptr STARTUPINFO
41: data STARTUPINFO = STARTUPINFO
42: { siCb :: DWORD
43: , siDesktop :: LPTSTR
44: , siTitle :: LPTSTR
45: , siX :: DWORD
46: , siY :: DWORD
47: , siXSize :: DWORD
48: , siYSize :: DWORD
49: , siXCountChars :: DWORD
50: , siYCountChars :: DWORD
51: , siFillAttribute :: DWORD
52: , siFlags :: DWORD
53: , siShowWindow :: WORD
54: , siStdInput :: HANDLE
55: , siStdOutput :: HANDLE
56: , siStdError :: HANDLE
57: } deriving Show
58:
59: instance Storable STARTUPINFO where
60: sizeOf = const #size STARTUPINFO
61: alignment = sizeOf
62: poke buf si = do
63: (#poke STARTUPINFO, cb) buf (siCb si)
64: (#poke STARTUPINFO, lpDesktop) buf (siDesktop si)
65: (#poke STARTUPINFO, lpTitle) buf (siTitle si)
66: (#poke STARTUPINFO, dwX) buf (siX si)
67: (#poke STARTUPINFO, dwY) buf (siY si)
68: (#poke STARTUPINFO, dwXSize) buf (siXSize si)
69: (#poke STARTUPINFO, dwYSize) buf (siYSize si)
70: (#poke STARTUPINFO, dwXCountChars) buf (siXCountChars si)
71: (#poke STARTUPINFO, dwYCountChars) buf (siYCountChars si)
72: (#poke STARTUPINFO, dwFillAttribute) buf (siFillAttribute si)
73: (#poke STARTUPINFO, dwFlags) buf (siFlags si)
74: (#poke STARTUPINFO, wShowWindow) buf (siShowWindow si)
75: (#poke STARTUPINFO, hStdInput) buf (siStdInput si)
76: (#poke STARTUPINFO, hStdOutput) buf (siStdOutput si)
77: (#poke STARTUPINFO, hStdError) buf (siStdError si)
78:
79: peek buf = do
80: vcb <- (#peek STARTUPINFO, cb) buf
81: vlpDesktop <- (#peek STARTUPINFO, lpDesktop) buf
82: vlpTitle <- (#peek STARTUPINFO, lpTitle) buf
83: vdwX <- (#peek STARTUPINFO, dwX) buf
84: vdwY <- (#peek STARTUPINFO, dwY) buf
85: vdwXSize <- (#peek STARTUPINFO, dwXSize) buf
86: vdwYSize <- (#peek STARTUPINFO, dwYSize) buf
87: vdwXCountChars <- (#peek STARTUPINFO, dwXCountChars) buf
88: vdwYCountChars <- (#peek STARTUPINFO, dwYCountChars) buf
89: vdwFillAttribute <- (#peek STARTUPINFO, dwFillAttribute) buf
90: vdwFlags <- (#peek STARTUPINFO, dwFlags) buf
91: vwShowWindow <- (#peek STARTUPINFO, wShowWindow) buf
92: vhStdInput <- (#peek STARTUPINFO, hStdInput) buf
93: vhStdOutput <- (#peek STARTUPINFO, hStdOutput) buf
94: vhStdError <- (#peek STARTUPINFO, hStdError) buf
95: return $ STARTUPINFO {
96: siCb = vcb,
97: siDesktop = vlpDesktop,
98: siTitle = vlpTitle,
99: siX = vdwX,
100: siY = vdwY,
101: siXSize = vdwXSize,
102: siYSize = vdwYSize,
103: siXCountChars = vdwXCountChars,
104: siYCountChars = vdwYCountChars,
105: siFillAttribute = vdwFillAttribute,
106: siFlags = vdwFlags,
107: siShowWindow = vwShowWindow,
108: siStdInput = vhStdInput,
109: siStdOutput = vhStdOutput,
110: siStdError = vhStdError}
111:
112: foreign import stdcall unsafe "windows.h WaitForSingleObject"
113: waitForSingleObject :: HANDLE -> DWORD -> IO DWORD
114:
115: cWAIT_ABANDONED :: DWORD
116: cWAIT_ABANDONED = #const WAIT_ABANDONED
117:
118: cWAIT_OBJECT_0 :: DWORD
119: cWAIT_OBJECT_0 = #const WAIT_OBJECT_0
120:
121: cWAIT_TIMEOUT :: DWORD
122: cWAIT_TIMEOUT = #const WAIT_TIMEOUT
123:
124: foreign import stdcall unsafe "windows.h GetExitCodeProcess"
125: getExitCodeProcess :: HANDLE -> LPDWORD -> IO BOOL
126:
127: foreign import stdcall unsafe "windows.h TerminateJobObject"
128: terminateJobObject :: HANDLE -> UINT -> IO BOOL
129:
130: foreign import stdcall unsafe "windows.h AssignProcessToJobObject"
131: assignProcessToJobObject :: HANDLE -> HANDLE -> IO BOOL
132:
133: foreign import stdcall unsafe "windows.h CreateJobObjectW"
134: createJobObjectW :: LPSECURITY_ATTRIBUTES -> LPCTSTR -> IO HANDLE
135:
136: foreign import stdcall unsafe "windows.h CreateProcessW"
137: createProcessW :: LPCTSTR -> LPTSTR
138: -> LPSECURITY_ATTRIBUTES -> LPSECURITY_ATTRIBUTES
139: -> BOOL -> DWORD -> LPVOID -> LPCTSTR -> LPSTARTUPINFO
140: -> LPPROCESS_INFORMATION -> IO BOOL
141:
142: #endif
143:
Generated by git2html.