امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
بستن پروسه هاي سيستمي
نویسنده پیام
Payman62 آفلاین
مدیر بخش ویژوال بیسیک
*****

ارسال‌ها: 2,273
موضوع‌ها: 149
تاریخ عضویت: اسفند ۱۳۸۴

تشکرها : 1308
( 3661 تشکر در 942 ارسال )
ارسال: #1
بستن پروسه هاي سيستمي
سلام.
من يه كد نوشتم كه با تابع Terminate پروسه هارو ميبنده(end task ميكنه). ولي وقتي بهش ميگم مثلا svchost.exe يا spoolsv.exe يا به طور كلي پروسه هاي سيستمي رو ببنده نميتونه. چه كار بايد بكنم كه بتونم از تو vb اين پروسه هاي سيستمي رو هم ببندم؟
۲۹-اسفند-۱۳۸۴, ۰۳:۱۲:۱۲
ارسال‌ها
پاسخ
Iron_Fist غایب
مدیر بازنشسته
*****

ارسال‌ها: 1,456
موضوع‌ها: 70
تاریخ عضویت: آبان ۱۳۸۴

تشکرها : 109
( 456 تشکر در 134 ارسال )
ارسال: #2
RE: بستن پروسه هاي سيستمي
شاید لازم باشه که با توابع سرویس اون ها رو متوقف کنی
(آخرین ویرایش در این ارسال: ۰۱-فروردین-۱۳۸۵, ۰۰:۳۰:۴۴، توسط Iron_Fist.)
۲۹-اسفند-۱۳۸۴, ۱۹:۴۶:۱۲
ارسال‌ها
پاسخ
Payman62 آفلاین
مدیر بخش ویژوال بیسیک
*****

ارسال‌ها: 2,273
موضوع‌ها: 149
تاریخ عضویت: اسفند ۱۳۸۴

تشکرها : 1308
( 3661 تشکر در 942 ارسال )
ارسال: #3
RE: بستن پروسه هاي سيستمي
ممنون ميشم توضيح بدي.
۲۹-اسفند-۱۳۸۴, ۲۰:۰۱:۳۹
ارسال‌ها
پاسخ
Iron_Fist غایب
مدیر بازنشسته
*****

ارسال‌ها: 1,456
موضوع‌ها: 70
تاریخ عضویت: آبان ۱۳۸۴

تشکرها : 109
( 456 تشکر در 134 ارسال )
ارسال: #4
RE: بستن پروسه هاي سيستمي
ببین دوست عزیز پروسس هایی که در اصطلاح سیستمی هستند رو نمی شه با
توابع پروسس کنترل کرد چون در واقع سرویس هستند
پس بنابراین باید با توابع سرویس کنترلشون کرد

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

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

فراخوانی :

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

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

(آخرین ویرایش در این ارسال: ۰۱-فروردین-۱۳۸۵, ۰۰:۲۰:۱۸، توسط Iron_Fist.)
۰۱-فروردین-۱۳۸۵, ۰۰:۱۷:۱۰
ارسال‌ها
پاسخ
Payman62 آفلاین
مدیر بخش ویژوال بیسیک
*****

ارسال‌ها: 2,273
موضوع‌ها: 149
تاریخ عضویت: اسفند ۱۳۸۴

تشکرها : 1308
( 3661 تشکر در 942 ارسال )
ارسال: #5
RE: بستن پروسه هاي سيستمي
از اين دستور استفاده كردم ولي سرويس مورد نظرم استاپ نميشد. خودم استارتشون ميكردم ولي استاپ نميشدن.

کد:
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
۰۱-فروردین-۱۳۸۵, ۱۸:۰۸:۲۲
ارسال‌ها
پاسخ
Iron_Fist غایب
مدیر بازنشسته
*****

ارسال‌ها: 1,456
موضوع‌ها: 70
تاریخ عضویت: آبان ۱۳۸۴

تشکرها : 109
( 456 تشکر در 134 ارسال )
ارسال: #6
RE: بستن پروسه هاي سيستمي
بابا کد رو هم که دیگه گذاشتم پس چرا از روی همون هم اشتباه کردی !!!
ببین دوست عزیز شما ترتیب رو در کد نوشتن رعایت نکردی
من برات توضیح می دم :

ببین در این خط کد
کد:
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 آفلاین
مدیر بخش ویژوال بیسیک
*****

ارسال‌ها: 2,273
موضوع‌ها: 149
تاریخ عضویت: اسفند ۱۳۸۴

تشکرها : 1308
( 3661 تشکر در 942 ارسال )
ارسال: #7
RE: بستن پروسه هاي سيستمي
معمولا وقتي كسي اينجا كد ميذاره به ترتيب ميذاره.
۰۱-فروردین-۱۳۸۵, ۲۱:۰۸:۰۴
ارسال‌ها
پاسخ
Iron_Fist غایب
مدیر بازنشسته
*****

ارسال‌ها: 1,456
موضوع‌ها: 70
تاریخ عضویت: آبان ۱۳۸۴

تشکرها : 109
( 456 تشکر در 134 ارسال )
ارسال: #8
RE:  بستن پروسه هاي سيستمي
Payman62 نوشته است:معمولا وقتي كسي اينجا كد ميذاره به ترتيب ميذاره.
یعنی شما می گی که ترتیبش درسته ؟

اگه به نظرت درسته و حرف های من غلط از روش خودت استفاده کن
یعنی اول پیغام بفرست و بعد بیا و سرویس و بانک اطلاعاتی سرویس
ها رو باز کن
دوست عزیز اگه یکم با API کار کرده بودی این صحبت رو نمی کردی
(آخرین ویرایش در این ارسال: ۰۱-فروردین-۱۳۸۵, ۲۱:۲۸:۲۱، توسط Iron_Fist.)
۰۱-فروردین-۱۳۸۵, ۲۱:۱۴:۴۰
ارسال‌ها
پاسخ
Payman62 آفلاین
مدیر بخش ویژوال بیسیک
*****

ارسال‌ها: 2,273
موضوع‌ها: 149
تاریخ عضویت: اسفند ۱۳۸۴

تشکرها : 1308
( 3661 تشکر در 942 ارسال )
ارسال: #9
RE: بستن پروسه هاي سيستمي
Iron_Fist نوشته است:
Payman62 نوشته است:معمولا وقتي كسي اينجا كد ميذاره به ترتيب ميذاره.
یعنی شما می گی که ترتیبش درسته ؟

اگه به نظرت درسته و حرف های من غلط از روش خودت استفاده کن
یعنی اول پیغام بفرست و بعد بیا و سرویس و بانک اطلاعاتی سرویس
ها رو باز کن
دوست عزیز اگه یکم با API کار کرده بودی این صحبت رو نمی کردی
نه عزيز منظورم اين نبود. منظورم اين بود كه كسي كد ميذاره مرتب ميذاره. آخه من كپي پيست كردم تو vb و فكر كردم شما كدها رو بالا پايين نوشته بودي كه من به مشكل بر خوردم. ولي الآن كه نگاه كردم ديدم حق با شما بود. شما كد رو درست نوشته بودي. من موقع كپي پيست اشتباه كرده بودم.
خيليم ازت ممنونم چون مشكلم حل شد.
(آخرین ویرایش در این ارسال: ۰۲-فروردین-۱۳۸۵, ۰۲:۵۵:۰۸، توسط Payman62.)
۰۲-فروردین-۱۳۸۵, ۰۲:۵۳:۳۷
ارسال‌ها
پاسخ
Payman62 آفلاین
مدیر بخش ویژوال بیسیک
*****

ارسال‌ها: 2,273
موضوع‌ها: 149
تاریخ عضویت: اسفند ۱۳۸۴

تشکرها : 1308
( 3661 تشکر در 942 ارسال )
ارسال: #10
RE: بستن پروسه هاي سيستمي
در مورد كار كردن با سرويس بازم اطلاعات ميخوام. مثلا استارت يه سرويس. يا خيلي كاراي ديگه. اگه دستورات يا API هاي مربوط به سرويس ها رو معرفي كني ممنون ميشم.
راستي سرويس هايي كه گفتي ويندوزا بالا نگه داشتن. تو سرويس ليست كه دكمه استاپشون خاموشه. با vb هم استاپ نشدن و 0 برميگردوندن.
۰۲-فروردین-۱۳۸۵, ۰۲:۵۸:۲۶
ارسال‌ها
پاسخ
Iron_Fist غایب
مدیر بازنشسته
*****

ارسال‌ها: 1,456
موضوع‌ها: 70
تاریخ عضویت: آبان ۱۳۸۴

تشکرها : 109
( 456 تشکر در 134 ارسال )
ارسال: #11
RE: بستن پروسه هاي سيستمي
بیا این برای استارت ( با فرض همون 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 برميگردوندن
آره راست می گی
۰۳-فروردین-۱۳۸۵, ۱۴:۴۲:۴۷
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  بستن برنامه اکسل در حال اجرا aleas 1 1,064 ۲۳-شهریور-۱۳۹۸, ۱۷:۲۴:۱۱
آخرین ارسال: Di Di
  [سوال] بستن یک پنجره در vb aban56 1 1,527 ۲۳-شهریور-۱۳۹۸, ۱۷:۱۹:۳۷
آخرین ارسال: Di Di
  بستن یه برنامه در حال پردازش sepahbod 4 3,564 ۰۳-اسفند-۱۳۹۱, ۱۱:۴۲:۴۵
آخرین ارسال: Ghoghnus
Cool بستن فرم Windos File Protection aliyarat 2 3,123 ۲۰-شهریور-۱۳۸۹, ۰۲:۴۷:۵۲
آخرین ارسال: Payman62
Rolleyes نمايش فايلهاي هايد و سيستمي محمدعلي 5 5,722 ۲۴-اسفند-۱۳۸۸, ۰۰:۵۰:۳۷
آخرین ارسال: 1120
  چگونه میتوان اطلاعات مربوط به یک پروسه رم را خواند؟ sylvester 10 8,870 ۱۶-بهمن-۱۳۸۸, ۲۱:۵۱:۲۵
آخرین ارسال: sylvester
Question بستن پروسس با مسیر saeedvir 2 3,360 ۱۱-بهمن-۱۳۸۸, ۰۹:۱۷:۴۳
آخرین ارسال: mohamadpk
  بستن و اجرای مجدد برنامه Scorpion 8 5,761 ۱۸-مهر-۱۳۸۸, ۲۳:۲۸:۴۳
آخرین ارسال: Payman62
  بستن برنامه قبل از اجرای کامل Scorpion 2 2,885 ۱۸-مهر-۱۳۸۸, ۲۰:۳۶:۱۸
آخرین ارسال: Scorpion
  مشكل بستن برنامه در حالت manifest hamed_Arfaee 5 4,054 ۰۸-تير-۱۳۸۸, ۰۸:۳۵:۵۰
آخرین ارسال: toopdanlod

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 3 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS