ببین دوست عزیز پروسس هایی که در اصطلاح سیستمی هستند رو نمی شه با
توابع پروسس کنترل کرد چون در واقع سرویس هستند
پس بنابراین باید با توابع سرویس کنترلشون کرد
این کد درواقع سرویس رو استاپ می کنه که ما فکر می کنیم سرویس بسته شده
و در واقع کار سرویس متوقف شده ! ( مثل همون بستنه )
فکر نکنم هر سرویسی رو بشه متوقف کرد چون عملا بعضی سرویس ها ویندوز
رو سر پا نگه می دارن و به عبارتی ویندوز به اونها وابسته است ( هنوز ریسک نکردم
که امتحان کنم ببینم چی می شه !!! )
ولی قاعده کار اینه می تونی امتحان کنی ببینی چی می شه !!!
فراخوانی :
کد:
Private Type SERVICE_STATUS
dwServiceType As Long
dwCurrentState As Long
dwControlsAccepted As Long
dwWin32ExitCode As Long
dwServiceSpecificExitCode As Long
dwCheckPoint As Long
dwWaitHint As Long
End Type
Private Const STANDARD_RIGHTS_REQUIRED As Long = &HF0000
Private Const SC_MANAGER_CONNECT As Long = &H1
Private Const SC_MANAGER_CREATE_SERVICE As Long = &H2
Private Const SC_MANAGER_ENUMERATE_SERVICE As Long = &H4
Private Const SC_MANAGER_LOCK As Long = &H8
Private Const SC_MANAGER_MODIFY_BOOT_CONFIG As Long = &H20
Private Const SC_MANAGER_QUERY_LOCK_STATUS As Long = &H10
Private Const SC_MANAGER_ALL_ACCESS As Long = (STANDARD_RIGHTS_REQUIRED Or SC_MANAGER_CONNECT Or SC_MANAGER_CREATE_SERVICE Or SC_MANAGER_ENUMERATE_SERVICE Or SC_MANAGER_LOCK Or SC_MANAGER_QUERY_LOCK_STATUS Or SC_MANAGER_MODIFY_BOOT_CONFIG)
Private Const SERVICE_STOP As Long = &H20
Private Const SERVICE_CONTROL_STOP As Long = &H1
Private Declare Function OpenSCManager Lib "advapi32.dll" Alias "OpenSCManagerA" (ByVal lpMachineName As String, ByVal lpDatabaseName As String, ByVal dwDesiredAccess As Long) As Long
Private Declare Function OpenService Lib "advapi32.dll" Alias "OpenServiceA" (ByVal hSCManager As Long, ByVal lpServiceName As String, ByVal dwDesiredAccess As Long) As Long
Private Declare Function ControlService Lib "advapi32.dll" (ByVal hService As Long, ByVal dwControl As Long, ByRef lpServiceStatus As SERVICE_STATUS) As Long
Private Declare Function CloseServiceHandle Lib "advapi32.dll" (ByValhSCObject As Long) As Long
کد اصلی برنامه :
کد:
Dim hSCM As Long
Dim hSrv As Long
Dim Info As SERVICE_STATUS
hSCM = OpenSCManager(vbNullString, vbNullString, SC_MANAGER_ALL_ACCESS)
hSrv = OpenService(hSCM, "[color=red]سرويس نيم[/color]", SERVICE_STOP)
Call ControlService(hSrv, SERVICE_CONTROL_STOP, Info)
CloseServiceHandle hSrv
CloseServiceHandle hSCM
برای مشاهده
سرویس نیم یک سرویس باید طبق مراحل زیر پیش بروید :
1.درون Run بنویسید services.msc
2.بعد از باز شدن پنجره سرویس ها روی سرویس مورد نظر دابل کلیک کنید
3.پنجره ای باز می شود که در بالای آن در یک لیبل نوشته شده Service name
4.در تکست باکس مقابل آن سرویس نیم نوشته شده ( دقت شود با Display name اشتباه گرفته نشود )
یک مثال برای درک مطلب :
مثلا پروسسی که ما در تسک منیجر به اسم LSASS.EXE مشاهده می کنیم با سرویسی به نام Net Logon
راه اندازی می شود
امیدوارم توضیحات کامل باشه .