Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A hibakereső motor szálainak és folyamatainak áttekintéséért tekintse meg a Szálak és folyamatok című témakört.
Esemény bekövetkezésekor az eseményszál és az eseményfolyamat arra a szálra és folyamatra (operációs rendszerre vagy virtuálisra) van állítva, amelyben az esemény történt. Ezek a GetEventThread és a GetEventProcess használatával találhatók meg.
Implicit szálak és folyamatok
Kernel módú hibakereséskor a hibakereső motor az implicit eljárással határozza meg, hogy melyik virtuális címtér legyen használva a virtuális és a fizikai címfordítás végrehajtásakor – például a VirtualToPhysical és a ReadVirtual metódusokban. Esemény bekövetkezésekor az implicit folyamat az aktuális folyamatra van állítva.
Az implicit folyamat a SetImplicitProcessDataOffset használatával módosítható. Az implicit folyamat meghatározásához használja a GetImplicitProcessDataOffsetet.
Jegyzet Amikor töréspontokat állít be egy élő kernel hibakeresési munkamenete során, a hibakereső motor átadja a töréspont virtuális címét a célnak, a cél pedig beállítja a töréspontot. Ebben az esetben a töréspont kezelésekor csak a cél folyamatkörnyezetét használja a rendszer; az implicit folyamat értéke irreleváns.
Kernel módú hibakeresés esetén a hibakereső motor az implicit szál használatával határozza meg a cél egyes regisztereit. Ez magában foglalja a processzorvermet (lásd : GetStackOffset), a keret eltolását (lásd : GetFrameOffset) és az utasításeltolást (lásd : GetInstructionOffset). Esemény bekövetkezésekor az implicit szál az aktuális szálra van állítva.
Az implicit szál a SetImplicitThreadDataOffset használatával módosítható. Az implicit szál meghatározásához használja a GetImplicitThreadDataOffset parancsot.
Nem minden regisztert az implicit szál határoz meg. Egyes regiszterek változatlanok maradnak az implicit szál módosításakor.
Figyelmeztetés Az implicit folyamat és az implicit szál független. Ha az implicit szál nem tartozik az implicit folyamathoz, akkor az implicit szál felhasználói és munkamenet-állapota nem megfelelő virtuális címtérben lesz, és az információk elérésére tett kísérletek hibát okoznak, vagy helytelen eredményeket adnak meg. Ez a probléma nem fordul elő a kernelmemória elérésekor, mivel a rendszermag memóriacímei állandók az összes virtuális címtérben. Így a kernelmemória implicit szálának információi az implicit folyamattól függetlenül is elérhetők lehetnek.
Szálak
A motorszál-azonosítót a hibakereső motor használja az egyes operációsrendszer-szálak és a cél minden egyes virtuális szálának azonosításához.
Amíg a cél le van állítva, minden szálnak van egy indexe ahhoz a folyamathoz képest, amelyhez tartozik. Bármely folyamat esetében a folyamat első szálának indexe nulla, az utolsó szál indexe pedig a folyamat szálainak száma mínusz egy. Az aktuális folyamat szálainak száma a GetNumberThreads használatával található. Az aktuális cél összes folyamatában található szálak teljes száma a GetTotalNumberThreads használatával érhető el.
Az aktuális folyamat egy vagy több szálának motorszál-azonosítója és rendszerszál-azonosítója a GetThreadIdsByIndex használatával található az indexből.
A motor több információt tart fenn az egyes szálakról. Ezek az információk lekérdezhetők az aktuális szálról, és felhasználhatók egy szál motorszál-azonosítójának megkeresésére.
rendszerszál azonosítója (csak felhasználói módú hibakeresés)
Az aktuális szál rendszerszál-azonosítója a GetCurrentThreadSystemId használatával található. Egy adott rendszerszál-azonosító esetében a megfelelő motorszál-azonosító a GetThreadIdBySystemId használatával található.
szálkörnyezeti blokk (TEB)
Az aktuális szál TEB-címe a GetCurrentThreadTeb használatával található. Egy adott TEB-cím esetében a megfelelő motorszál-azonosító a GetThreadIdByTeb használatával található. Kernel módú hibakeresés esetén a (virtuális) szál TEB-je annak a rendszerszálnak a TEB-je, amely a megfelelő processzoron futott az utolsó esemény bekövetkezésekor.
adateltolás
Felhasználói módú hibakeresés során egy (rendszer)szál adateltolása annak a szálnak a TEB-helyzetét jelenti. Kernel módú hibakeresés során a (virtuális) szál adateltolása a KTHREAD-struktúra, amely azt a rendszerszálat jelképezi, amelyik a megfelelő processzoron futott az utolsó esemény bekövetkezésekor. Az aktuális szál adateltolása a GetCurrentThreadDataOffset használatával érhető el. Adott adateltolás esetén a megfelelő motorszál-azonosító a GetThreadIdByDataOffset használatával található.
rendszerfogópont
Az aktuális szál rendszerfogópontja a GetCurrentThreadHandle használatával található. Egy adott rendszerfogantyú esetében a megfelelő motorszál-azonosító a GetThreadIdByHandle használatával található. Kernel módú hibakeresés esetén minden (virtuális) folyamathoz létrejön egy mesterséges fogópont. Ez a kezelő csak hibakereső-motor API-lekérdezéseivel használható.
Folyamatok
A motorfolyamat-azonosítót a hibakereső motor használja a cél operációsrendszer-folyamatainak és minden egyes virtuális folyamatának azonosításához.
Amíg egy cél le van állítva, minden folyamat indexel a célhoz képest. A cél első folyamatának indexe nulla, az utolsó folyamat indexe pedig a célban lévő folyamatok száma mínusz egy. Az aktuális célfolyamatok száma a GetNumberProcesses használatával található.
Az aktuális cél egy vagy több szálának motorfolyamat-azonosítója és rendszerfolyamat-azonosítója a GetProcessIdsByIndex használatával található az indexből.
A motor számos információt tart fenn az egyes folyamatokról. Ezek az információk lekérdezhetők az aktuális folyamatra vonatkozóan, és felhasználhatók a folyamat motorfolyamat-azonosítójának megkeresésére.
rendszerfolyamat azonosítója (csak felhasználói módú hibakeresés)
Az aktuális folyamat rendszerfolyamat-azonosítója a GetCurrentProcessSystemId használatával található. Egy adott rendszerfolyamat-azonosító esetében a megfelelő motorfolyamat-azonosító a GetProcessIdBySystemId használatával található.
folyamatkörnyezeti blokk (PEB)
Az aktuális folyamat PEB-címe a GetCurrentProcessPeb használatával található. Egy adott PEB-cím esetében a megfelelő motorfolyamat-azonosító a GetProcessIdByPeb használatával található. Kernel módú hibakeresés esetén a (virtuális) folyamat PEB-je annak a rendszerfolyamatnak a PEB-je, amely az utolsó esemény bekövetkezésekor futott.
adateltolás
Felhasználói módú hibakeresés esetén egy (rendszer)folyamat adateltolása az adott folyamat PEB-jének helye. Kernel módú hibakeresés esetén a (virtuális) folyamat adateltolása az utolsó esemény bekövetkezésekor futó rendszerfolyamat KPROCESS-struktúrája. Az aktuális folyamat adateltolása a GetCurrentProcessDataOffset használatával érhető el. Adott adateltolás esetén a megfelelő motorfolyamat-azonosító a GetProcessIdByDataOffset használatával található.
rendszerfogópont
Az aktuális folyamat rendszerleírója a GetCurrentProcessHandle használatával található. Egy adott rendszerfogópont esetében a megfelelő motorfolyamat-azonosító a GetProcessIdByHandle használatával található. Kernel módú hibakeresés esetén a rendszer létrehoz egy mesterséges fogópontot a (virtuális) folyamathoz. Ez a leíró csak hibakereső motorlekérdezések esetén használható.
Események
Élő felhasználói módú hibakeresés során, amikor egy szál létrejön vagy kilép egy célfolyamatban, szál-létrehozási és szál-kilépési hibakeresési események jönnek létre. Ezek az események az IDebugEventCallbacks::CreateThread és az IDebugEventCallbacks::ExitThread visszahívási metódusokat eredményezik.
Élő felhasználói módú hibakeresés esetén, amikor egy folyamat létrejön vagy kilép egy célból, a rendszer létrehozza a létrehozási és kilépési folyamat hibakeresési eseményeit. Ezek az események az IDebugEventCallbacks::CreateProcess és az IDebugEventCallbacks::ExitProcess visszahívási metódusokra irányuló hívásokat eredményeznek .
Az eseményekről további információt az Események monitorozása című témakörben talál.
További információk
További információ a szálakról és folyamatokról, beleértve a TEB, a KTHREAD, a PEB és a KPROCESS struktúrákat, lásd David Solomon és Mark Russinovich Microsoft Windows Internals című témakörét.