史萊姆論壇

返回   史萊姆論壇 > 教學文件資料庫 > 作業系統操作技術文件
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


 
 
主題工具 顯示模式
舊 2004-03-11, 11:44 AM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 Windows的服務卸載的工具

微軟自己出的東西
命令行工具是instsrv.exe,Win2000 Resource Kits中有
windows下是instsrvw.exe


su這個工具可以.具體參數可以參照以下:
Sc.exe (Service Controller Tool)
幹好一年以前就寫過這個東西介紹了。大家再看一遍吧!:s
我們知道在MStools SDK,也就是在Resource Kit有一個很少有人知道的命令行軟體,SC.exe,這個軟體向所有的Windows NT和Windows 2000要求控制他們的API函數。我們可以在命令行裡通過對這些函數設定參數的方式來設定他們(API)。SC.exe也可以顯示服務的狀態,同時也可以從狀態結構區域裡重新找到存儲在裡面的數值。它還可以列出遠端電腦的服務函數或者是服務狀況結構。SC.exe這個開發工具至少可以比服務控制台程序和網路命令行界面(net.exe,這個東西可以告訴你一個服務是在執行中,還是停止,還是暫停。)這兩個東西提供更多的細節和準確的訊息。雖然上述兩個東西在正常工作的情況下,對於完整的調試是非常好用的,但是如果有新的服務,或者新的代碼被開發出來的時候,這兩個工具提供的訊息可能造成誤導。這也就是我們需要用到SC的原因。

下面舉列說明,如果在開發階段,你的服務在掛住在一個start-pending的時候,控制台和net.exe同樣報告服務是在執行的。但它掛在一個stop-pending的時候,net.exe報告它執行,而控制台著報告它停止,如果你試著 啟動它,這是控制台則會告訴你這個服務正在執行。難道這不是很困惑嗎?呵呵!

SC.exe可以讓你詢問服務的狀況和取出存儲在狀態結構區域內的數值,控制台和net.exe不提供服務完整的狀況 。但是無論如何,SC程序可以告訴你這個服務準確的情形,同樣也可以給你看最後的checkpoint數和等待提示。

這個checkpoint,我叫它檢查點(我覺得他就像一個程序調試時置的斷點),所以我們也可以把看作為一個調試工具,因為它可以提供一個關於在程序停止時還要沿著初始化繼續前進多久準確報告。

SC.exe也可以允許你使用很多的服務控制API函數,可以讓你從命令行裡改變大量的參數。這位服務開發者們提供了很多的優勢。例如,它提供了一個方便的方式來新建或者在註冊表和服務控制管理資料庫中配置服務訊息。開發者們不需要在手動的在註冊表裡單獨的設置鍵值來配置服務,也不用重啟動機器來強迫服務控制管理資料庫昇級 。

作為一個命令很工具,SC.exe可以用來測試你自己的系統,你可以設置一個批次處理檔案來使用不同的參數使用SC.exe來控制服務。這個很有用,如果你想看看你的服務不斷的啟動和停止,我沒有試過哦!讓一個服務一下子開啟,一下子關閉,聽上去很不錯的。如果你的服務行程裡面有多個行程的話,你可以保持一個行程繼續執行不讓它走開,然後讓另一個不斷的開啟在關閉,還可以尋找一下記憶體缺乏導致不完全清楚的證據。

下面介紹SC,SC QC,and SC QUERY
SC使用這樣的語法:

1. SC [Servername] command Servicename [Optionname= Optionvalue]

2. SC [command]

這裡使用第一種語法使用SC,使用第二種語法顯示幫助。

下面介紹各種參數。

Servername
可選擇:可以使用雙斜線,如\\myserver,也可以是\\192.168.0.1來操作遠端電腦。如果在本地電腦上操作就不用新增任何參數。

Command
下面列出SC可以使用的命令。

config 改變一個服務的配置。(長久的)

continue 對一個服務送出一個繼續控制的要求。

control 對一個服務送出一個控制。

create 新建一個服務。(增加到註冊表中)

delete 刪除一個服務。(從註冊表中刪除)

EnumDepend 列舉服務的從屬關係。

GetDisplayName 獲得一個服務的顯示名稱。

GetKeyName 獲得一個服務的服務鍵名。

interrogate 對一個服務送出一個詢問控制要求。

pause 對一個服務送出一個暫停控制要求。

qc 詢問一個服務的配置。

query 詢問一個服務的狀態,也可以列舉服務的狀態類型。

start 啟動一個服務。

stop 對一個服務送出一個停止的要求。

Servicename

在註冊表中為service key制定的名稱。注意這個名稱是不同於顯示名稱的(這個名稱可以用net start和服務控制台看到),而SC是使用服務鍵名來鑒別服務的。

Optionname

這個optionname和optionvalue參數允許你指定操作命令參數的名稱和數值。注意,這一點很重要在操作名稱和等號之間是沒有空格的。一開始我不知道,結果………………,譬如,start= optionvalue,這個很重要。
optionvalue可以是0,1,或者是更多的操作參數名稱和數值對。

如果你想要看每個命令的可以用的optionvalue,你可以使用sc command這樣的格式。這會為你提供詳細的幫助。

Optionvalue

為optionname的參數的名稱指定它的數值。有效數值範圍常常限制於哪一個參數的optionname。如果要列表請用sc command來詢問每個命令。

Comments

很多的命令需要管理員權限,所以我想說,在你操作這些東西的時候最好是管理員。呵呵!

當你鍵入SC而不帶任何參數時,SC.exe會顯示幫助訊息和可用的命令。當你鍵入SC緊跟著命令名稱時,你可以得到一個有關這個命令的詳細列表。譬如,鍵入sc create可以得到和create有關的列表。

但是除了一個命令,sc query,這會匯出該系統中當前正在執行的所有服務和驅動程式的狀態。

當你使用start命令時,你可以傳遞一些參數(arguments)給服務的主函數,但是不是給服務行程的主函數。
SC create
這個命令可以在註冊表和服務控制管理資料庫建立一個入口。

語法1
sc [servername] create Servicename [Optionname= Optionvalue]

這裡的servername,servicename,optionname,optionvalue和上面的一樣,這裡就不多說了。這裡我們

詳細說明一下optionname和optionvalue。

Optionname Optionvalue
描述type= own, share, interact, kernel, filesys
關於建立服務的類型,選項值包括驅動程式使用的類型,預設值是share。

start= boot, system, auto, demand, disabled
關於啟動服務的類型,選項值包括驅動程式使用的類型,預設值是demand(手動)。

error= normal, severe, critical, ignore
當服務在匯入失敗錯誤的嚴重性,預設值是normal。

binPath= (string)
服務二進制檔案的路徑名,這裡沒有預設值值,這個字元串是必須設置的。

group= (string)
這個服務屬於的組,這個組的列表儲存在註冊表中的ServiceGroupOrder下。預設值是nothing。

tag= (string)
如果這個字元串被設置為yes,sc可以從CreateService call中得到一個tagId。然而,SC並不顯示這個標籤,所以使用這個沒有多少意義。預設值是nothing

depend= (space separated string)有空格的字元串。
在這個服務啟動前必須啟動的服務的名稱或者是組。

obj= (string)
帳戶執行使用的名稱,也可以說是登入身份。預設值是localsystem

Displayname= (string)
一個為在用戶界面程序中鑒別各個服務使用的字元串。

password= (string)
一個密碼,如果一個不同於localsystem的帳戶使用時需要使用這個。

Optionvalue
Optionname參數名稱的數值列表。參考optionname。當我們輸入一個字元串時,如果輸入一個空的引用這意味著一個空的字元串將被匯入。

Comments
The SC CREATE command performs the operations of the CreateService API function.
這個sc create命令執行CreateService API函數的操作。詳細請見CreateService。

例1

下面這個例子在一台叫做(\\myserver)的電腦上為一個叫「NewService」的服務建立的一個註冊表登記。
sc \\myserver create NewService binpath= c:\winnt\system32\NewServ.exe

按照預設值,這個服務會建立一個WIN32_SHARE_PROCESS使用SERVICE_DEMAND_START啟動方式。這將不會有任何從屬關係,也將會按照localsystem安全上下關係來執行。

例2

下面這個例子將在本地電腦上,建立一個服務,它將會是一個自動執行服務,並且執行在他自己的行程上。它從屬於TDI組和NetBios服務上。注意,你必須在從屬中間增加一個空格的引用。

sc create NewService binpath= c:\winnt\system32\NewServ.exe type= own
start= auto depend= "+TDI Netbios"

例3

服務開發者可以通過臨時改變二進制路徑(影像路徑)的方式來將這個服務執行在內核除錯器的上下關係中。下面這個例子就可以讓我們看到如何改變服務的配置。

sc config NewService binpath= "ntsd -d c:\winnt\system32\Newserv.exe"
這個例子會引起服務控制管理器使用ntsd.exe使用下例的參數位符串:
"-d c:\nt\system32\NewServ.exe"

當系統裝入newserv.exe時ntsd將會轉而打斷除錯器,所以斷點可以被設置在服務代碼裡。

SC QC

這個SC QC「詢問配置」命令可以列出一個服務的配置訊息和QUERY_SERVICE_CONFIG結構。

語法1
sc [Servername] qc Servicename [Buffersize]

Parameters
servername和servicename前面已經介紹過了,這裡不再多說。

Buffersize,可選擇的,列出緩衝區的尺寸。

Comments

SC QC命令顯示了QUERY_SERVICE_CONFIG結構的內容。

以下是QUERY_SERVICE_CONFIG相應的區域。
TYPE dwServiceType
START_TYPE dwStartType
ERROR_CONTROL dwErrorControl
BINARY_PATH_NAME lpBinaryPathName
LOAD_ORDER_GROUP lpLoadOrderGroup
TAG dwTagId
DISPLAY_NAME lpDisplayName
DEPENDENCIES lpDependencies
SERVICE_START_NAME lpServiceStartName

例1

下面這個例子詢問了在上面例子中建立的「NewService」服務的配置:

sc \\myserver qc NewService

sc顯示下面的訊息:

SERVICE_NAME: NewService
TYPE : 20 WIN32_SHARE_PROCESS
START_TYPE : 3 DEMAND_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : c:\winnt\system32\NewServ.exe
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : NewService
DEPENDENCIES :
SERVICE_START_NAME : LocalSystem

NewService有能力和其他的服務共享一個行程。但是它不是自動啟動的。二進制檔案名是NewServ.exe。這個服務不依靠與其它的的服務,而且執行在lcoalsystem的安全上下關係中。這些都是使用QueryServiceStatus基本的返回,如果還需要更多的細節屆時,可以看看API函數檔案。

SC QUERY

SC QUERY命令可以獲得服務的訊息。

語法:
sc [Servername] query { Servicename │ Optionname= Optionvalue... }

參數:

servername, servicename, optionname, optionvalue不在解釋。只談一下這個命令提供的數值。

Optionname Optionvalue
Description

type= driver, service, all
列舉服務的類型,預設值是service

state= active, inactive, all
列舉服務的狀態,預設值是active

bufsize= (numeric value)
列舉緩衝區的尺寸,預設值是1024 bytes

ri= (numeric value)
但開始列舉時,恢復指針的數位,預設值是0

Optionvalue
同上。

Comments

SC QUERY命令可以顯示SERVICE_STATUS結構的內容。

下面是SERVICE_STATUS結構相應的訊息:
TYPE dwServiceType
STATE dwCurrentState, dwControlsAccepted
WIN32_EXIT_CODE dwWin32ExitCode
SERVICE_EXIT_CODE dwServiceSpecificExitCode
CHECKPOINT dwCheckPoint
WAIT_HINT dwWaitHint

在啟動電腦後,使用SC QUERY命令會告訴你是否,或者不是一個啟動服務的嘗試。如果這個服務成功啟動,WIN32_EXIT_CODE區間會將會包含一個0,當嘗試不成功時,當它意識到這個服務不能夠啟動時,這個區間也會提供一個退出碼給服務。

例子

查詢「NewService"服務狀態,鍵入:

sc query NewService

顯示一下訊息:

SERVICE_NAME: NewService
TYPE : 20 WIN32_SHARE_PROCESS
STATE : 1 STOPPED
(NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
WIN32_EXIT_CODE : 1077 (0x435)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0

注意,這裡存在一個給這個服務的退出碼,即使這個服務部不在執行,鍵入net helpmsg 1077,將會得到對1077錯誤訊息的說明: 上次啟動之後,仍未嘗試啟始服務。所以,這裡我想說一句,希望大家可以活用net helpmsg,這會對你的學習有很大的幫助。

下面在對SC query的命令在說明一下:

列舉活動服務和驅動程式狀態,使用以下命令:
sc query

顯示messenger服務,使用以下命令:
sc query messenger

只列舉活動的驅動程式,使用以下命令:
sc query type= driver

列舉Win32服務,使用以下命令:
sc query type= service

列舉所有的服務和驅動程式,使用以下命令:
sc query state= all

用50 byte的緩衝區來進行列舉,使用以下命令:
sc query bufsize= 50

在恢復列舉時使用index=14,使用以下命令:
sc query ri=14

列舉所有的交互式服務,使用以下命令:
sc query type= service type= interact

好了,說到這裡。SC命令基本上已經說完了。希望大家好好看看,呵呵!相信會有幫助的!!
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
 



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 11:14 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1