ภาษาคิวรี

ถามเครื่องหนึ่งคำถาม

ภาษาเดียว ทั้งในช่องค้นหาของหน้าต่างและใน bws list --query คำเดี่ยวๆ จะค้นหาในชื่อ ชื่อที่แสดง บัญชี และพาธการเปิดใช้งาน ฟิลด์ช่วยจำกัดให้แคบลง 21 ฟิลด์ และข้อความเดียวกันมีความหมายเดียวกันในทั้งสองส่วนของเครื่องมือ

หกคิวรีที่ตอบคำถามจริง

อะไรที่ควรทำงานแต่ไม่ได้ทำงาน

start:auto !status:running

คิวรีแรกที่คนส่วนใหญ่เขียน และเป็นคิวรีที่ services.msc ตอบไม่ได้เลย

บริการที่ไฟล์หายไป

file:missing

รายการที่ชี้ไปยังไฟล์ปฏิบัติการที่ไม่อยู่บนดิสก์ มักเกิดจากการถอนการติดตั้งที่ทิ้งการลงทะเบียนไว้

ไม่มีลายเซ็น และไม่มีสัญญาณรบกวนจากเซสชัน

signed:no peruser:no

ตระกูลต่อผู้ใช้สร้างสำเนาต่อเซสชันและทำให้รายชื่อเต็มไปด้วยรายการที่เกือบซ้ำกัน คิวรีนี้ถามเฉพาะส่วนที่เหลือ

ทำงานทั้งที่ปิดใช้งาน

mismatch:running

การกำหนดค่าและสถานะขัดแย้งกัน รายการที่ตัวจัดการตั้งไว้ไม่ให้เริ่มเลย แต่ทำงานอยู่

อะไรก็ตามที่ขอสิทธิ์ดีบัก

privilege:SeDebugPrivilege

สิทธิพิเศษที่ให้กระบวนการเปิดกระบวนการอื่นได้ทุกตัว ควรรู้ว่าบริการไหนขอมัน

สิ่งที่เครื่องมืออ่านไม่ได้

account:?

รายการที่เซสชันนี้อ่านบัญชีไม่ได้ เป็นคำถามที่ services.msc ถามไม่ได้ด้วยซ้ำ

เขียนคิวรีอย่างไร

คำค้น

  • คำค้นคั่นด้วยช่องว่างและต้องตรงทุกคำ ไม่มีคีย์เวิร์ด and เพราะมันไม่มีความหมายอื่นที่เป็นไปได้
  • ฟิลด์เดียวกันที่เขียนสองครั้งเป็นข้อยกเว้นเดียว: status:running status:stopped หมายถึงอย่างใดอย่างหนึ่ง เพราะนั่นคือสิ่งที่การติ๊กตัวกรองสองตัวเขียนออกมา ขอบเขตสองด้านของตัวเลขยังคงจำกัดให้แคบลง pid:>1000 pid:<2000 คือช่วงระหว่างทั้งสอง
  • ! หน้าคำค้นทำให้เป็นนิเสธ: !status:running ในไฟล์แบตช์ที่มี setlocal EnableDelayedExpansion cmd จะกิน ! นั้นโดยไม่บอกอะไร และคิวรีก็มีความหมายอื่นไปเงียบๆ ให้เขียน ^! ภายในเครื่องหมายคำพูดตรงนั้น
  • เครื่องหมายจุลภาคภายในฟิลด์คือ หรือ: start:manual,disabled
  • เครื่องหมายคำพูดปกป้องสิ่งที่มีช่องว่างหรือเครื่องหมายทวิภาค: account:"NT SERVICE\McmSvc"
  • พาธที่วางมาตามที่เป็น C:\Windows\System32\svchost.exe จะถูกค้นหา ไม่ถูกอ่านเป็นฟิลด์ชื่อ C

ข้อความจับคู่อย่างไร

  • name:spool ตรงกับทุกอย่างที่ มี คำนั้น เป็นค่าเริ่มต้น เพราะเป็นสิ่งที่คนคาดหวังจากช่องค้นหา
  • name:=spooler คือตรงทั้งหมด
  • name:spool* รับไวลด์การ์ด * และ ?
  • name:/^Sql.*/ คือนิพจน์ปกติ และภายในเครื่องหมายทับเขียนตามแบบของนิพจน์ปกติ: \?, \\ และเครื่องหมายจุลภาคมีความหมายตามที่มันมีในนั้น เครื่องหมายทับที่ไม่ปิดคือข้อผิดพลาด ถ้าจะค้นหาเครื่องหมายทับเอง ให้เขียน \/ หรือใช้เครื่องหมายคำพูด
  • ไม่สนตัวพิมพ์ใหญ่เล็ก รวมถึงนอก ASCII ชื่อที่แสดงภาษาโปแลนด์หรือกรีกตรงกันไม่ว่าจะพิมพ์แบบไหน

สามคำที่ทุกฟิลด์ยอมรับ

  • any - มีค่า ไม่ว่าค่าอะไรก็ตาม
  • none - ไม่มีค่าจริงๆ รายการนั้นไม่มีค่า
  • ? - เครื่องมืออ่านฟิลด์นี้ไม่ได้ หรือยังไม่ได้อ่าน ซึ่งเป็นคำถามที่ services.msc ถามไม่ได้ด้วยซ้ำ

ค่าที่พิมพ์ผิดคือข้อผิดพลาด ไม่เคยเป็นผลลัพธ์ว่าง status:runing ตอบว่า Did you mean running? และจบด้วยรหัส 2 รายชื่อว่างจะดูเหมือนคำตอบ และความต่างระหว่าง “ไม่มีอะไรตรง” กับ “คุณพิมพ์ผิด” คือความต่างระหว่างเครื่องที่สะอาดกับการตรวจสอบที่ไม่ได้พิสูจน์อะไร คิวรีที่ไม่ทำให้แคบลงเลยจะถูกปฏิเสธบนบรรทัดคำสั่งด้วย สคริปต์จึงไม่ทำงานกับทั้งเครื่องเพราะพิมพ์ผิดตัวเดียว

ตัวอย่างเพิ่มเติม

แต่ละตัวทำงานเหมือนกันในช่องค้นหาของหน้าต่างและหลัง bws list --query และแต่ละตัวถูกรันบน Windows จริงก่อนจะเขียนไว้ที่นี่ สิ่งที่พบขึ้นอยู่กับเครื่อง และสำหรับคำถามเรื่องปัญหา คำตอบที่ว่างคือคำตอบที่คุณต้องการ

สถานะและประเภทการเริ่มต้น

คิวรีสิ่งที่พบ
status:stopPending,startPendingค้างอยู่ที่กำลังหยุดหรือกำลังเริ่ม การรอที่สแนปอินแสดงและไม่มีวันจบ
start:auto status:stopped trigger:noneตั้งให้เริ่มอัตโนมัติ หยุดอยู่ และไม่ได้รอทริกเกอร์ รายชื่อสั้นๆ ที่ควรอ่านหลังรีสตาร์ต
start:delayedอัตโนมัติ เริ่มช้ากว่ารายการอัตโนมัติอื่นเล็กน้อย
start:manual,disabled status:runningทำงานอยู่ทั้งที่ไม่มีอะไรเริ่มมันตอนบูต มีบางอย่างขอมัน ทริกเกอร์เริ่มมัน หรือมีคนเริ่มมัน

บัญชี

คิวรีสิ่งที่พบ
account:localsystem !publisher:microsoftรันเป็น LocalSystem บัญชีที่แรงที่สุด จากไฟล์ที่ Microsoft ไม่ได้ลงลายเซ็น คิวรีเกี่ยวกับผู้เผยแพร่อ่านลายเซ็นเอง จึงใช้เวลาไม่กี่วินาที
!account:localsystem,localservice,networkservice type:ownProcess,sharedProcessบริการที่รันภายใต้บัญชีอื่นใด บัญชีเสมือน บัญชีที่มีการจัดการ หรือบัญชีของคนใดคนหนึ่งเอง
account:"NT SERVICE"บัญชีเสมือนของบริการเอง เครื่องหมายคำพูดรวมคำเข้าด้วยกันเพราะมีช่องว่าง

ไฟล์และลายเซ็น

คิวรีสิ่งที่พบ
signed:notSigned,untrustedRoot,tamperedไม่มีลายเซ็น สายใบรับรองที่ Windows ไม่เชื่อถือ หรือไฟล์ที่ถูกเปลี่ยนหลังลงลายเซ็น
signed:trusted !publisher:microsoftลงลายเซ็น เชื่อถือได้ และไม่ใช่โดย Microsoft ซอฟต์แวร์ที่บริษัทอื่นวางไว้บนเครื่องนี้
type:driver start:boot,system !signed:trustedไดรเวอร์ที่โหลดตอน Windows เริ่มซึ่ง Windows ไม่เชื่อถือลายเซ็น บนเครื่องที่แข็งแรงควรไม่มีเลย
!path:C:\Windows type:ownProcessบริการที่มีกระบวนการของตัวเองซึ่งไฟล์อยู่นอกโฟลเดอร์ Windows
path:\AppData\เปิดจากภายในโปรไฟล์ของใครสักคน ที่สุดท้ายที่คนคาดว่าจะมีบริการ
path:\System32\\ type:ownProcessแบ็กสแลชหน้าช่องว่างทำให้ช่องว่างเป็นส่วนหนึ่งของคำ ดังนั้นพาธที่ลงท้ายด้วยแบ็กสแลชจึงเขียนสองตัวเมื่อมีคำค้นอื่นตามหลัง ที่ท้ายคิวรีหนึ่งตัวก็พอ

ทริกเกอร์และการพึ่งพา

คิวรีสิ่งที่พบ
trigger:device status:stoppedรอให้อุปกรณ์มาถึง จึงหยุดด้วยเหตุผล
trigger:networkเริ่มเมื่อมีคำขอมาถึงเอ็นด์พอยต์เครือข่าย พอร์ต named pipe หรืออินเทอร์เฟซ RPC
trigger:stopรายการที่ทริกเกอร์หยุดได้ ไม่ใช่แค่เริ่ม
dependson:Winmgmtรายการที่ต้องใช้ WMI เพื่อทำงาน
requiredby:Spoolerทุกอย่างที่ Print Spooler ต้องใช้เพื่อทำงาน และสิ่งที่สิ่งเหล่านั้นต้องใช้ต่อกันไป

สิทธิพิเศษและกระบวนการ

คิวรีสิ่งที่พบ
privilege:SeTcbPrivilegeขอทำงานเป็นส่วนหนึ่งของระบบปฏิบัติการ
privilege:SeImpersonatePrivilege !account:localsystemทำงานแทนไคลเอนต์ได้ขณะรันภายใต้บัญชีอื่นที่ไม่ใช่ LocalSystem
sidtype:unrestrictedมี service SID ของตัวเองในกระบวนการ สิทธิ์จึงระบุชื่อมันตัวเดียวได้ sidtype:restricted ถามถึงรายการที่กระบวนการถูกจำกัดการเขียนด้วย
type:sharedProcess status:runningทำงานอยู่ใน svchost ที่ใช้ร่วมกัน พร้อมรายการอื่น
memory:>200MBกระบวนการที่ใช้มากกว่า 200 MB หน่วยความจำจะถูกอ่านเองเมื่อคิวรีถามถึงมัน
pid:1000-2000อยู่ในกระบวนการที่ id อยู่ระหว่าง 1000 ถึง 2000

ชื่อและข้อความ

คิวรีสิ่งที่พบ
spoolคำเดี่ยวๆ ค้นหาในชื่อ ชื่อที่แสดง บัญชี และพาธการเปิดใช้งาน
name:=wuauservชื่อนี้ตรงทั้งหมด และไม่มีอะไรที่แค่มีมันอยู่ข้างใน
name:win*ชื่อที่ขึ้นต้นด้วย win เขียนด้วยไวลด์การ์ด
name:/svc$/ชื่อที่ลงท้ายด้วย svc เขียนเป็นนิพจน์ปกติ
description:noneไม่มีคำอธิบายเลย ซึ่งคือไดรเวอร์ส่วนใหญ่
description:?คำอธิบายที่ Windows ส่งมาให้ไม่ได้ มักเพราะชี้ไปที่ไฟล์ภาษาที่ไม่อยู่
peruser:templateแม่แบบต่อผู้ใช้ที่ Windows คัดลอกสำหรับแต่ละเซสชันที่ลงชื่อเข้าใช้

ทุกฟิลด์

สร้างจากโปรแกรมเอง ตารางนี้จึงไม่มีทางห่างจากสิ่งที่เครื่องมือยอมรับ ฟิลด์ที่ไม่มีรายการค่าจะรับข้อความ ตัวเลข หรือขนาด คอลัมน์ที่สามบอกว่าอย่างไหน

ฟิลด์ถามเกี่ยวกับค่า
nameชื่อบริการ ชื่อที่ Windows ใช้ระบุมันข้อความ
displayชื่อที่แสดง ตามที่ Windows เครื่องนี้สะกดข้อความ
descriptionสิ่งที่รายการบอกเกี่ยวกับตัวเองข้อความ
typeรายการนี้เป็นชนิดไหนdriver, kernelDriver, fileSystemDriver, ownProcess, sharedProcess, unknown
peruserใช่หรือไม่ที่เป็นหนึ่งในตระกูลต่อผู้ใช้ซึ่ง Windows สร้างสำเนาต่อเซสชันyes, no, template, instance
statusตอนนี้กำลังทำอะไรอยู่running, stopped, paused, pending, startPending, stopPending, pausePending, continuePending, unknown
startตัวจัดการทำอะไรกับมันตอนบูตครั้งถัดไปautomatic, auto, delayed, manual, disabled, boot, system, unknown
accountบัญชีที่มันรัน ตามที่ตัวจัดการสะกดข้อความ เช่น localsystem
pidกระบวนการที่มันรันอยู่ตัวเลข: 1234, >1000, 100-200
triggerเงื่อนไขที่เริ่มหรือหยุดมันdevice, ip, domain, firewall, policy, network, custom, state, aggregate, unknown, start, stop
pathบรรทัดคำสั่งที่ตัวจัดการเรียกใช้ข้อความ
fileไฟล์ที่มันรันอยู่บนดิสก์หรือไม่present, missing
signedWindows คิดอย่างไรกับลายเซ็นของไฟล์ โดยไม่ตรวจการเพิกถอนyes, no, trusted, notSigned, untrustedRoot, expired, revoked, tampered, unknown
publisherใครลงลายเซ็นไฟล์ พิสูจน์ได้ด้วยลายเซ็นที่เชื่อถือได้เท่านั้นข้อความ
privilegeสิทธิพิเศษที่รายการขอข้อความ เช่น SeDebugPrivilege
dependsonสิ่งที่รายการนี้ต้องการชื่อบริการ
requiredbyสิ่งที่เสียหายถ้ารายการนี้หยุดชื่อบริการ
sidtypeประเภท SID ของบริการunrestricted, restricted, unknown
sddlsecurity descriptor ในรูปแบบข้อความข้อความ
memoryสิ่งที่กระบวนการของมันใช้อยู่ขนาดพร้อมหน่วย: 500MB, >1GB, 100MB-1GB
mismatchการกำหนดค่าและสถานะที่ขัดแย้งกันstopped, running

สองเรื่องที่ควรรู้

บางฟิลด์แพง และการถามถึงมันจะเปิดการอ่าน

ลายเซ็นใช้เวลาหลายวินาทีทั้งเครื่อง และหน่วยความจำเป็นการวัดไม่ใช่การตั้งค่า จึงไม่อ่านทั้งสองสำหรับรายชื่อเว้นแต่จะขอ คิวรีที่กล่าวถึงอย่างใดอย่างหนึ่งจะเปิดการอ่านนั้นเอง คุณไม่ต้องจำ --signatures เพิ่มจาก signed:no ในหน้าต่าง คิวรีเกี่ยวกับลายเซ็นจะบอกว่าคำตอบยังไม่ครบจนกว่าลายเซ็นจะมาถึง แทนที่จะแสดงรายชื่อที่สั้นลงราวกับเป็นคำตอบ

ผลลัพธ์ที่ตัดสินจากสิ่งที่อ่านไม่ได้จะบอกไว้

ถ้ารายการถูกตัดสินจากฟิลด์ที่เซสชันนี้อ่านไม่ได้ ผลลัพธ์จะมีบรรทัดบอกว่ากี่รายการ เพราะผลลัพธ์แบบนั้นอาจขาดรายการหรือมีรายการที่ไม่ควรอยู่ นั่นคือกฎเดียวกับที่ทั้งเครื่องมือยึดถือ การอ่านที่ไม่สำเร็จมองเห็นได้ในคำตอบ ไม่เคยถูกกลืนหาย ผู้เผยแพร่ได้รับการปฏิบัติแบบเดียวกันเมื่อมีเพียงใบรับรองที่อ้างมัน ข้างคำตัดสินใดที่ไม่ใช่ trusted ชื่อจะแสดงเป็น not verified และ publisher: นับรายการนั้นว่าไม่แน่ใจในบรรทัดของตัวเอง ดังนั้น !publisher:microsoft จึงเก็บไฟล์ Microsoft ที่มีคนเปลี่ยนหลังลงลายเซ็นไว้

เอกสารอ้างอิงบรรทัดคำสั่ง