Cane anyone figure out why this code is leaking?
StartService http://msdn2.microsoft.com/en-us/library/ms686321.aspx
OpenSCManager http://msdn2.microsoft.com/en-us/library/ms684323.aspx
OpenService http://msdn2.microsoft.com/en-us/library/ms684330.aspx
CloseServiceHandle http://msdn2.microsoft.com/en-us/library/ms682028.aspx
Strict
Import "-ladvapi32"
Extern
Function _OpenSCManager:Int(nmachinename$z,ndatabasename$z,ndesiredaccess:Int) = "OpenSCManagerA@12"
Function _CloseServiceHandle:Int(nhandle:Int) = "CloseServiceHandle@4"
Function _OpenService:Int(nmananger:Int,nservicename$z,ndesiredaccess:Int) = "OpenServiceA@12"
Function _StartService:Int(service:Int,serviceargs:Int,serviceargvectors$z) = "StartServiceA@12"
Function _GetLastError:Int() = "GetLastError@0"
End Extern
Const SC_MANAGER_ENUMERATE_SERVICE:Int = 4
Const SERVICE_START:Int = 16
Const SERVICE_STOP:Int = 32
Const SERVICE_QUERY_STATUS:Int = 4
Type tservice
Field handle:Int
Method start:Int()
'starts the service
End Method
Method stop:Int()
'stops the service
End Method
Method status:Int()
'gets the status of the service
End Method
End Type
Function OpenService:tservice(nname:String)
'open the service manager
Local temp_servicemanagerhandle:Int
Local temp_offset1:Int
Local temp_offset2:Int
Local temp_offset3:Int
Local temp_offset4:Int
Local temp_servicehandle:Int
DebugStop()
temp_servicemanagerhandle = _OpenSCManager(Null,Null,SC_MANAGER_ENUMERATE_SERVICE)
If temp_servicemanagerhandle = 0
Print "lasterror = "+_GetLastError()
Else
Print "openend service manager = "+temp_servicemanagerhandle
temp_servicehandle = _OpenService(temp_servicemanagerhandle,nname,SERVICE_QUERY_STATUS | SERVICE_START | SERVICE_STOP)
If temp_servicehandle
Print "openend service = "+temp_servicehandle
Local temp_service:tservice = New tservice
temp_service.handle = temp_servicehandle
Local temp_result:Int = _StartService(temp_service.handle,0,Null)
If temp_result = 0
Print "error = "+_GetLastError()
Else
Print "result = "+temp_result
_CloseServiceHandle(temp_servicehandle)
End If
End If
'close teh service manager handle
_CloseServiceHandle(temp_servicemanagerhandle)
End If
End Function
OpenService("Messenger")
|