summaryrefslogtreecommitdiff
path: root/Utility/WinProcess.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Utility/WinProcess.hs')
-rw-r--r--Utility/WinProcess.hs17
1 files changed, 15 insertions, 2 deletions
diff --git a/Utility/WinProcess.hs b/Utility/WinProcess.hs
index cfac8794c..31f6cfc69 100644
--- a/Utility/WinProcess.hs
+++ b/Utility/WinProcess.hs
@@ -11,5 +11,18 @@ module Utility.WinProcess where
import Utility.PID
-foreign import ccall unsafe "winprocess.h terminatepid"
- terminatePID :: PID -> IO ()
+import System.Win32.Process
+import Control.Exception (bracket)
+import Control.Monad
+
+terminatePID :: PID -> IO ()
+terminatePID p = bracket
+ (openProcess pROCESS_TERMINATE False p)
+ (void . c_closeProcess)
+ (\h -> void $ c_TerminateProcess h 1)
+
+foreign import ccall unsafe "windows.h TerminateProcess"
+ c_TerminateProcess :: ProcessHandle -> Int -> IO Int
+
+foreign import ccall unsafe "windows.h CloseHandle"
+ c_closeProcess :: ProcessHandle -> IO Bool