ايران ويج

نسخه‌ی کامل: بستن پروسه هاي سيستمي
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
صفحه‌ها: 1 2
سلام.
من يه كد نوشتم كه با تابع Terminate پروسه هارو ميبنده(end task ميكنه). ولي وقتي بهش ميگم مثلا svchost.exe يا spoolsv.exe يا به طور كلي پروسه هاي سيستمي رو ببنده نميتونه. چه كار بايد بكنم كه بتونم از تو vb اين پروسه هاي سيستمي رو هم ببندم؟
شاید لازم باشه که با توابع سرویس اون ها رو متوقف کنی
ممنون ميشم توضيح بدي.
ببین دوست عزیز پروسس هایی که در اصطلاح سیستمی هستند رو نمی شه با
توابع پروسس کنترل کرد چون در واقع سرویس هستند
پس بنابراین باید با توابع سرویس کنترلشون کرد

این کد درواقع سرویس رو استاپ می کنه که ما فکر می کنیم سرویس بسته شده
و در واقع کار سرویس متوقف شده ! ( مثل همون بستنه )

فکر نکنم هر سرویسی رو بشه متوقف کرد چون عملا بعضی سرویس ها ویندوز
رو سر پا نگه می دارن و به عبارتی ویندوز به اونها وابسته است ( هنوز ریسک نکردم
که امتحان کنم ببینم چی می شه !!! )
ولی قاعده کار اینه می تونی امتحان کنی ببینی چی می شه !!!

فراخوانی :

کد:
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
راه اندازی می شود

امیدوارم توضیحات کامل باشه .

از اين دستور استفاده كردم ولي سرويس مورد نظرم استاپ نميشد. خودم استارتشون ميكردم ولي استاپ نميشدن.

کد:
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



Private Sub Command1_Click()
Call ControlService(hSrv, SERVICE_CONTROL_STOP, Info)
hSCM = OpenSCManager(vbNullString, vbNullString, SC_MANAGER_ALL_ACCESS)
hSrv = OpenService(hSCM, "Wmi", SERVICE_STOP)


CloseServiceHandle hSrv
CloseServiceHandle hSCM
End Sub
بابا کد رو هم که دیگه گذاشتم پس چرا از روی همون هم اشتباه کردی !!!
ببین دوست عزیز شما ترتیب رو در کد نوشتن رعایت نکردی
من برات توضیح می دم :

ببین در این خط کد
کد:
hSCM = OpenSCManager(vbNullString, vbNullString, SC_MANAGER_ALL_ACCESS)
ما بانک اطلاعاتی سرویس ها رو باز می کنیم

بعد در این خط کد
کد:
hSrv = OpenService(hSCM, "Wmi", SERVICE_STOP)
سرویس رو با اجازه ی استاپ سرویس باز می کنیم

و بعد در این خط
کد:
Call ControlService(hSrv, SERVICE_CONTROL_STOP, Info)
دستورمون رو به سرویس می فرستیم

و حالا شما اومدی و خط آخر که می آد و دستور به سرویس می فرسته رو گذاشتی اول
کد:
Call ControlService(hSrv, SERVICE_CONTROL_STOP, Info)
hSCM = OpenSCManager(vbNullString, vbNullString, SC_MANAGER_ALL_ACCESS)
hSrv = OpenService(hSCM, "Wmi", SERVICE_STOP)
آخه مگه می شه بانک اطلاعاتی و خود سرویس رو باز نکرده بری و بهش دستور بفرستی
الان اگه مقدارhSCM, hSrv رو ببینی می بینی صفر هست چون توابع با شکست رو برو شدند

این اصلاح شدش هست :
کد:
hSCM = OpenSCManager(vbNullString, vbNullString, SC_MANAGER_ALL_ACCESS)
hSrv = OpenService(hSCM, "Wmi", SERVICE_STOP)
Call ControlService(hSrv, SERVICE_CONTROL_STOP, Info)
امتحان هم کردم کار می ده !!!
معمولا وقتي كسي اينجا كد ميذاره به ترتيب ميذاره.
Payman62 نوشته است:معمولا وقتي كسي اينجا كد ميذاره به ترتيب ميذاره.
یعنی شما می گی که ترتیبش درسته ؟

اگه به نظرت درسته و حرف های من غلط از روش خودت استفاده کن
یعنی اول پیغام بفرست و بعد بیا و سرویس و بانک اطلاعاتی سرویس
ها رو باز کن
دوست عزیز اگه یکم با API کار کرده بودی این صحبت رو نمی کردی
Iron_Fist نوشته است:
Payman62 نوشته است:معمولا وقتي كسي اينجا كد ميذاره به ترتيب ميذاره.
یعنی شما می گی که ترتیبش درسته ؟

اگه به نظرت درسته و حرف های من غلط از روش خودت استفاده کن
یعنی اول پیغام بفرست و بعد بیا و سرویس و بانک اطلاعاتی سرویس
ها رو باز کن
دوست عزیز اگه یکم با API کار کرده بودی این صحبت رو نمی کردی
نه عزيز منظورم اين نبود. منظورم اين بود كه كسي كد ميذاره مرتب ميذاره. آخه من كپي پيست كردم تو vb و فكر كردم شما كدها رو بالا پايين نوشته بودي كه من به مشكل بر خوردم. ولي الآن كه نگاه كردم ديدم حق با شما بود. شما كد رو درست نوشته بودي. من موقع كپي پيست اشتباه كرده بودم.
خيليم ازت ممنونم چون مشكلم حل شد.
در مورد كار كردن با سرويس بازم اطلاعات ميخوام. مثلا استارت يه سرويس. يا خيلي كاراي ديگه. اگه دستورات يا API هاي مربوط به سرويس ها رو معرفي كني ممنون ميشم.
راستي سرويس هايي كه گفتي ويندوزا بالا نگه داشتن. تو سرويس ليست كه دكمه استاپشون خاموشه. با vb هم استاپ نشدن و 0 برميگردوندن.
بیا این برای استارت ( با فرض همون Wmi )
کد:
Dim hSCM As Long
Dim hSrv As Long

hSCM = OpenSCManager(vbNullString, vbNullString, SC_MANAGER_ALL_ACCESS)
hSrv = OpenService(hSCM, "Wmi", SERVICE_START)
Call StartService(hSrv, 0, ByVal 0&)

CloseServiceHandle hSrv
CloseServiceHandle hSCM
دکلریشن :
کد:
Private Declare Function StartService Lib "advapi32.dll" Alias "StartServiceA" (ByVal hService As Long, ByVal dwNumServiceArgs As Long, ByVal lpServiceArgVectors As Long) As Long
Private Const SERVICE_START As Long = &H10

نقل قول: اگه دستورات يا API هاي مربوط به سرويس ها رو معرفي كني ممنون ميشم
http://msdn.microsoft.com/library/defaul...ctions.asp
نقل قول: راستي سرويس هايي كه گفتي ويندوزا بالا نگه داشتن. تو سرويس ليست كه دكمه استاپشون خاموشه. با vb هم استاپ نشدن و 0 برميگردوندن
آره راست می گی
صفحه‌ها: 1 2