锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品国产日韩,欧美精品成人,欧美电影免费观看高清完整版http://www.shnenglu.com/shaker/category/16823.htmlshaker's Blog<br>鐢熷綋浣滀漢鏉幫紝姝諱害涓洪闆勶紝鑷充粖鎬濋」緹斤紝涓嶈偗榪囨睙涓溿?/description>zh-cnThu, 15 Sep 2011 16:37:09 GMTThu, 15 Sep 2011 16:37:09 GMT60LISTVIEW_LButtonDownhttp://www.shnenglu.com/shaker/archive/2011/09/15/155890.htmlshaker(澶瓙)shaker(澶瓙)Thu, 15 Sep 2011 13:45:00 GMThttp://www.shnenglu.com/shaker/archive/2011/09/15/155890.htmlhttp://www.shnenglu.com/shaker/comments/155890.htmlhttp://www.shnenglu.com/shaker/archive/2011/09/15/155890.html#Feedback0http://www.shnenglu.com/shaker/comments/commentRss/155890.htmlhttp://www.shnenglu.com/shaker/services/trackbacks/155890.html闃呰鍏ㄦ枃

]]>
[zt] Windows APC鏈哄埗http://www.shnenglu.com/shaker/archive/2011/05/05/145733.htmlshaker(澶瓙)shaker(澶瓙)Thu, 05 May 2011 04:09:00 GMThttp://www.shnenglu.com/shaker/archive/2011/05/05/145733.htmlhttp://www.shnenglu.com/shaker/comments/145733.htmlhttp://www.shnenglu.com/shaker/archive/2011/05/05/145733.html#Feedback0http://www.shnenglu.com/shaker/comments/commentRss/145733.htmlhttp://www.shnenglu.com/shaker/services/trackbacks/145733.html寮傛榪囩▼璋冪敤(APCs) 鏄疦T寮傛澶勭悊浣撶郴緇撴瀯涓殑涓涓熀紜閮ㄥ垎錛岀悊瑙d簡瀹冿紝瀵逛簬浜嗚ВNT鎬庢牱鎿嶄綔鍜屾墽琛屽嚑涓牳蹇冪殑緋葷粺鎿嶄綔寰堟湁甯姪銆?/p>

1) APCs鍏佽鐢ㄦ埛紼嬪簭鍜岀郴緇熷厓浠跺湪涓涓繘紼嬬殑鍦板潃絀洪棿鍐呮煇涓嚎紼嬬殑涓婁笅鏂囦腑鎵ц浠g爜銆?br>2) I/O綆$悊鍣ㄤ嬌鐢ˋPCs鏉ュ畬鎴愪竴涓嚎紼嬪彂璧風殑寮傛鐨処/O鎿嶄綔銆備緥濡傦細褰撲竴涓澶囬┍鍔ㄨ皟鐢↖oCompleteRequest鏉ラ氱煡I/O綆$悊鍣紝瀹冨凡緇忕粨鏉熷鐞嗕竴涓紓姝/O璇鋒眰鏃訛紝I/O綆$悊鍣ㄦ帓闃熶竴涓猘pc鍒板彂璧瘋姹傜殑綰跨▼銆傜劧鍚庣嚎紼嬪湪涓涓緝浣嶪RQL綰у埆錛屾潵鎵цAPC. APC鐨勪綔鐢ㄦ槸浠庣郴緇熺┖闂存嫹璐滻/O鎿嶄綔緇撴灉鍜岀姸鎬佷俊鎭埌綰跨▼铏氭嫙鍐呭瓨絀洪棿鐨勪竴涓紦鍐蹭腑銆?br>3) 浣跨敤APC鍙互寰楀埌鎴栬呰緗竴涓嚎紼嬬殑涓婁笅鏂囧拰鎸傝搗綰跨▼鐨勬墽琛屻?/p>

涓婇潰鏄綉涓婃壘鏉ョ殑錛屼笅闈㈡槸MSDN涓婄殑璇存槑錛?/p>


An asynchronous procedure call (APC) is a function that executes asynchronously in the context of a particular thread. When an APC is queued to a thread, the system issues a software interrupt. The next time the thread is scheduled, it will run the APC function. An APC generated by the system is called a kernel-mode APC. An APC generated by an application is called a user-mode APC. A thread must be in an alertable state to run a user-mode APC.

Each thread has its own APC queue. An application queues an APC to a thread by calling the QueueUserAPC function. The calling thread specifies the address of an APC function in the call to QueueUserAPC. The queuing of an APC is a request for the thread to call the APC function.

榪樺厛鐪嬩竴涓嬮偅浜涢噸瑕佺粨鏋勶細

kd> dt KTHREAD
nt!KTHREAD
+0x000 Header : _DISPATCHER_HEADER
+0x010 MutantListHead : _LIST_ENTRY
+0x018 InitialStack : Ptr32 Void
+0x01c StackLimit : Ptr32 Void
+0x020 KernelStack : Ptr32 Void
+0x024 ThreadLock : Uint4B
+0x028 ApcState : _KAPC_STATE
+0x028 ApcStateFill : [23] UChar
+0x03f ApcQueueable : UChar
+0x040 NextProcessor : UChar
+0x041 DeferredProcessor : UChar
+0x042 AdjustReason : UChar
+0x043 AdjustIncrement : Char
+0x044 ApcQueueLock : Uint4B
+0x048 ContextSwitches : Uint4B
+0x04c State : UChar
+0x04d NpxState : UChar
+0x04e WaitIrql : UChar
+0x04f WaitMode : Char
+0x050 WaitStatus : Int4B
+0x054 WaitBlockList : Ptr32 _KWAIT_BLOCK
+0x054 GateObject : Ptr32 _KGATE
+0x058 Alertable : UChar
+0x059 WaitNext : UChar
+0x05a WaitReason : UChar
+0x05b Priority : Char
+0x05c EnableStackSwap : UChar
+0x05d SwapBusy : UChar
+0x05e Alerted : [2] UChar
+0x060 WaitListEntry : _LIST_ENTRY
+0x060 SwapListEntry : _SINGLE_LIST_ENTRY
+0x068 Queue : Ptr32 _KQUEUE
+0x06c WaitTime : Uint4B
+0x070 KernelApcDisable : Int2B
+0x072 SpecialApcDisable : Int2B
+0x070 CombinedApcDisable : Uint4B
+0x074 Teb : Ptr32 Void
+0x078 Timer : _KTIMER
+0x078 TimerFill : [40] UChar
+0x0a0 AutoAlignment : Pos 0, 1 Bit
+0x0a0 DisableBoost : Pos 1, 1 Bit
+0x0a0 ReservedFlags : Pos 2, 30 Bits
+0x0a0 ThreadFlags : Int4B
+0x0a8 WaitBlock : [4] _KWAIT_BLOCK
+0x0a8 WaitBlockFill0 : [23] UChar
+0x0bf SystemAffinityActive : UChar
+0x0a8 WaitBlockFill1 : [47] UChar
+0x0d7 PreviousMode : Char
+0x0a8 WaitBlockFill2 : [71] UChar
+0x0ef ResourceIndex : UChar
+0x0a8 WaitBlockFill3 : [95] UChar
+0x107 LargeStack : UChar
+0x108 QueueListEntry : _LIST_ENTRY
+0x110 TrapFrame : Ptr32 _KTRAP_FRAME
+0x114 CallbackStack : Ptr32 Void
+0x118 ServiceTable : Ptr32 Void
+0x11c ApcStateIndex : UChar
+0x11d IdealProcessor : UChar
+0x11e Preempted : UChar
+0x11f ProcessReadyQueue : UChar
+0x120 KernelStackResident : UChar
+0x121 BasePriority : Char
+0x122 PriorityDecrement : Char
+0x123 Saturation : Char
+0x124 UserAffinity : Uint4B
+0x128 Process : Ptr32 _KPROCESS
+0x12c Affinity : Uint4B
+0x130 ApcStatePointer : [2] Ptr32 _KAPC_STATE
+0x138 SavedApcState : _KAPC_STATE
+0x138 SavedApcStateFill : [23] UChar
+0x14f FreezeCount : Char
+0x150 SuspendCount : Char
+0x151 UserIdealProcessor : UChar
+0x152 CalloutActive : UChar
+0x153 Iopl : UChar
+0x154 Win32Thread : Ptr32 Void
+0x158 StackBase : Ptr32 Void
+0x15c SuspendApc : _KAPC
+0x15c SuspendApcFill0 : [1] UChar
…………

…………

涓婇潰綰㈣壊閮ㄥ垎鏄疉PC鏈哄埗鐢ㄥ埌鐨勫嚑涓瓧孌碉紒錛?/p>

kd> dt _KAPC_STATE
nt!_KAPC_STATE
+0x000 ApcListHead : [2] _LIST_ENTRY錛屾瘡涓寚閽堟寚鍚慱KAPC緇撴瀯
+0x010 Process : Ptr32 _KPROCESS
+0x014 KernelApcInProgress : UChar
+0x015 KernelApcPending : UChar
+0x016 UserApcPending : UChar

鏄劇劧錛岃繖閲岀殑 ApcListHead 灝辨槸 APC 闃熷垪澶淬備笉榪囪繖鏄釜澶у皬涓?2 鐨勬暟緇勶紝璇存槑瀹為檯
涓?姣忎釜綰跨▼)鏈変袱涓?APC 闃熷垪銆傝繖鏄洜涓?APC 鍑芥暟鍒嗕負鐢ㄦ埛 APC 鍜屽唴鏍?APC 涓ょ錛屽悇鏈?br>鍚勭殑闃熷垪銆傛墍璋撶敤鎴?APC錛屾槸鎸囩浉搴旂殑 APC 鍑芥暟浣嶄簬鐢ㄦ埛絀洪棿銆佸湪鐢ㄦ埛絀洪棿鎵ц錛涜屽唴鏍?br>APC錛屽垯鐩稿簲鐨?APC 鍑芥暟涓哄唴鏍稿嚱鏁般?/p>

SavedApcState涔熸槸涓猒KAPC_STATE緇撴瀯錛屽綋褰撳墠紼嬫殏鏃?#8220;鎸傞潬(Attach)”鍒板彟涓涓繘紼嬬殑鍦板潃絀洪棿鐨勬椂渚紝ApcState灝辨嫹璐濆埌SavedApcState鏆傛椂瀛樻斁錛?/p>

褰撶劧錛岃繕瑕佹湁鐘舵佷俊鎭鏄庢湰綰跨▼褰撳墠鏄浜?#8220;鍘熷鐜”榪樻槸“鎸傞潬鐜”錛岃繖灝辨槸 ApcStateIndex 鐨勪綔鐢紝浠g爜涓負 ApcStateIndex鐨勫煎畾涔変簡涓縐嶆灇涓劇被鍨嬶細

typedef enum _KAPC_ENVIRONMENT {
OriginalApcEnvironment,
AttachedApcEnvironment,
CurrentApcEnvironment,
InsertApcEnvironment
} KAPC_ENVIRONMENT;

瀹為檯鍙敤浜?ApcStateIndex 鐨勫彧鏄?OriginalApcEnvironment鍜?AttachedApcEnvironment銆?/p>

KAPC_STATE 鎸囬拡鏁扮粍 ApcStatePointer[2]錛屽氨鐢ˋpcStateIndex 鐨勫綋鍓嶅間綔涓轟笅鏍囷紝鑰屾暟緇勪腑鐨勬寚閽堝垯鏍規嵁鎯呭喌鍙互鍒嗗埆鎸囧悜涓や釜APC_STATE 鏁版嵁緇撴瀯涓殑涓涓?/p>

kd> dt _KAPC ;APC瀵硅薄
nt!_KAPC
+0x000 Type : UChar
+0x001 SpareByte0 : UChar
+0x002 Size : UChar
+0x003 SpareByte1 : UChar
+0x004 SpareLong0 : Uint4B
+0x008 Thread : Ptr32 _KTHREAD
+0x00c ApcListEntry : _LIST_ENTRY
+0x014 KernelRoutine : Ptr32 void
+0x018 RundownRoutine : Ptr32 void
+0x01c NormalRoutine : Ptr32 void
+0x020 NormalContext : Ptr32 Void
+0x024 SystemArgument1 : Ptr32 Void
+0x028 SystemArgument2 : Ptr32 Void
+0x02c ApcStateIndex : Char
+0x02d ApcMode : Char
+0x02e Inserted : UChar

KernelRoutine銆丷undownRoutine銆丯ormalRoutine銆傚叾涓彧鏈?NormalRoutine鎵嶆寚鍚?鎵ц)APC 鍑芥暟鐨勮姹傝呮墍鎻愪緵鐨勫嚱鏁幫紝鍏朵綑涓や釜閮芥槸杈呭姪鎬х殑錛?/p>

NTKERNELAPI
VOID
KeInitializeApc (
__out PRKAPC Apc,
__in PRKTHREAD Thread,
__in KAPC_ENVIRONMENT Environment,
__in PKKERNEL_ROUTINE KernelRoutine,
__in_opt PKRUNDOWN_ROUTINE RundownRoutine,
__in_opt PKNORMAL_ROUTINE NormalRoutine,
__in_opt KPROCESSOR_MODE ProcessorMode,
__in_opt PVOID NormalContext
);

榪欎釜鍑芥暟涓昏鐢ㄦ潵鍒濆鍖朅pc錛坃KAPC錛夎繖涓粨鏋勭殑錛屽鏋淓nvironment==CurrentApcEnvironment,Apc->ApcStateIndex灝辯敱KTHREAD涓殑ApcStateIndex鍐沖畾錛屼絾Environment涓嶈兘澶т簬KTHREAD涓殑ApcStateIndex錛?/p>

鏈鍚庯紝APC 璇鋒眰鐨勬ā寮廝rocessorMode錛屼絾鏄湁涓緥澶栵紝閭e氨鏄細濡傛灉鎸囬拡NormalRoutine 涓?0錛岄偅涔堝疄闄呯殑妯″紡鍙樻垚浜?KernelMode銆傝繖鏄洜涓哄湪榪欑鎯呭喌涓嬫病鏈夌敤鎴風┖闂碅PC鍑芥暟鍙互鎵ц錛?鍞竴灝嗗緱鍒版墽琛岀殑鏄疜ernelRoutine錛?/p>

鏈鍚庯紝KeInitializeApc 璁劇疆Inserted鍩熶負FALSE銆傜劧鑰屽垵濮嬪寲APC瀵硅薄錛屽茍娌℃湁鎶婂畠瀛樻斁鍒扮浉搴旂殑APC闃熷垪涓?/p>


NTKERNELAPI
BOOLEAN
KeInsertQueueApc (
__inout PRKAPC Apc,
__in_opt PVOID SystemArgument1,
__in_opt PVOID SystemArgument2,
__in KPRIORITY Increment
);

鎹瓵PC璇鋒眰鐨勫叿浣撴儏鍐碉紝鏈夋椂鍊欒鎻掑湪闃熷垪鐨勫墠澶達紝涓鑸垯鎸傚湪闃熷垪鐨勫熬閮ㄣ?/p>

_KiServiceExit:

cli ; disable interrupts
DISPATCH_USER_APC ebp, ReturnCurrentEax

;
; Exit from SystemService
;

EXIT_ALL NoRestoreSegs, NoRestoreVolatile ;榪欎釜瀹忎互鍚庡啀璁?/p>

DISPATCH_USER_APC macro TFrame, ReturnCurrentEax
local a, b, c
c:
.errnz (EFLAGS_V86_MASK AND 0FF00FFFFh)

test byte ptr [TFrame]+TsEflags+2, EFLAGS_V86_MASK/010000h ; is previous mode v86?
jnz short b ; if nz, yes, go check for APC
test byte ptr [TFrame]+TsSegCs,MODE_MASK ; is previous mode user mode?
jz a ; No, previousmode=Kernel, jump out
b: mov ebx, PCR[PcPrcbData+PbCurrentThread]; get addr of current thread
mov byte ptr [ebx]+ThAlerted, 0 ; clear kernel mode alerted
cmp byte ptr [ebx]+ThApcState.AsUserApcPending, 0
je a ; if eq, no user APC pending

mov ebx, TFrame
ifnb <ReturnCurrentEax>;鏉′歡瀹忔眹緙栵紝濡傛灉ReturnCurrentEax鍙傛暟涓嶄負絀猴紝鍒欑紪璇戯紒

;DISPATCH_USER_APC ebp, ReturnCurrentEax錛屾樉鐒惰繖閲屾槸緙栬瘧鐨勶紒
mov [ebx].TsEax, eax ; Store return code in trap frame
mov dword ptr [ebx]+TsSegFs, KGDT_R3_TEB OR RPL_MASK
mov dword ptr [ebx]+TsSegDs, KGDT_R3_DATA OR RPL_MASK
mov dword ptr [ebx]+TsSegEs, KGDT_R3_DATA OR RPL_MASK
mov dword ptr [ebx]+TsSegGs, 0
endif

;
; Save previous IRQL and set new priority level
;
RaiseIrql APC_LEVEL
push eax ; Save OldIrql

sti ; Allow higher priority ints

;
; call the APC delivery routine.
;
; ebx - Trap frame
; 0 - Null exception frame
; 1 - Previous mode
;
; call APC deliver routine
;

stdCall _KiDeliverApc, <1, 0, ebx> ;1灝辨槸UserMode

pop ecx ; (ecx) = OldIrql
LowerIrql ecx

ifnb <ReturnCurrentEax> ;鍚屼笂鍒嗘瀽
mov eax, [ebx].TsEax ; Restore eax, just in case
endif

cli
jmp b ; 娉ㄦ剰榪欎釜寰幆錛侊紒

ALIGN 4
a:
endm

榪欐浠g爜涓昏媯鏌ワ細

鍗沖皢榪斿洖鐨勬槸鍚︾敤鎴風┖闂淬?br>鏄惁鏈夌敤鎴稟PC璇鋒眰姝e湪絳夊緟鎵ц

鏉′歡絎﹀悎鎵嶇敤KiDeliverApc鐪熸鎶曢扐PC銆傛敞鎰忎唬鐮乯mp b錛屽ソ鍍忓湪榪斿洖鐢ㄦ埛絀洪棿鍓岾iDeliverApc浼氳寰幆璋冪敤鐩村埌娌℃湁user APC錛屽叾瀹炰笉鏄殑錛孠iDeliverApc姣忓鐞嗗畬涓涓猆ser APC灝辨妸UserApcPending娓呴浂錛屾墍浠ser APCs鍦ㄨ繑鍥炵敤鎴風┖闂存椂榪樻槸鍙兘鎶曢掍竴嬈★紒KiDeliverApc涓敤while澶勭悊瀹屾墍鏈塊ernel Mode APCs錛屼絾User Mode APC鍗村彧澶勭悊涓涓紒浜嬪疄涓奤ser APC鐨勬姇閫掓槸寰堢壒孌婄殑錛屼互鍚庝細璁插埌錛岃屼笖姣忔鍙兘鎶曢掍竴嬈★紒


鍓嶉潰璁茶繃錛孠THREAD 涓湁涓や釜 KAPC_STATE 鏁版嵁緇撴瀯錛屼竴涓槸 ApcState錛屽彟涓涓槸SavedApcState錛屼簩鑰呴兘鏈堿PC 闃熷垪錛屼絾鏄鎶曢掔殑鍙槸ApcState 涓殑闃熷垪銆?/p>

KiDeliverApc (
IN KPROCESSOR_MODE PreviousMode,//鍐欐垚DeliverMode涓嶆槸鏇村ソ
IN PKEXCEPTION_FRAME ExceptionFrame,//榪欎釜鍙傛暟鍑犱箮灝辨槸0
IN PKTRAP_FRAME TrapFrame
)

榪欎釜鍑芥暟閲岄潰榪樻瘮杈冨鏉傦紝浠g爜涓嶅笘浜嗐?/p>

鍙傛暟PreviousMode琛ㄧず闇瑕?#8220;鎶曢?#8221;鍝竴縐?APC錛屽彲浠ユ槸UserMode錛屼篃鍙互鏄疜ernelMode銆備笉榪囷紝KernelMode 紜疄琛ㄧず鍙姹傛墽琛屽唴鏍?APC錛岃孶serMode 鍗磋〃紺哄湪鎵ц鍐呮牳 APC 涔嬪鍐嶆墽琛岀敤鎴稟PC銆?/p>

The Windows operating system uses three kinds of APCs:


User APCs run strictly in user mode and only when the current thread is in an alertable wait state. The operating system uses user APCs to implement mechanisms such as overlapped I/O and the QueueUserApc Win32 routine. 錛坮un IRQL = PASSIVE_LEVEL錛?br>Normal kernel APCs run in kernel mode at IRQL = PASSIVE_LEVEL. A normal kernel APC preempts all user-mode code, including user APCs. Normal kernel APCs are generally used by file systems and file-system filter drivers.
Special kernel APCs run in kernel mode at IRQL = APC_LEVEL. A special kernel APC preempts user-mode code and kernel-mode code that executes at IRQL = PASSIVE_LEVEL, including both user APCs and normal kernel APCs. The operating system uses special kernel APCs to handle operations such as I/O request completion.
浠庝唬鐮佺殑瑙掑害鐪嬫槸榪欐牱鐨勶細

User APCs
_KAPC.ApcMode==UserMode,_KAPC.KernelRoutine!=NULL,_KAPC.NormolRoutine!=NULL

Normal kernel APCs

_KAPC.ApcMode==KernelMode,_KAPC.KernelRoutine!=NULL,_KAPC.NormolRoutine!=NULL

Special kernel APCs

_KAPC.ApcMode==KernelMode,_KAPC.KernelRoutine!=NULL,_KAPC.NormolRoutine==NULL

鏈変竴鐐瑰畠浠殑_KAPC.KernelRoutine鑲畾涓嶄負絀恒傚茍涓旓紝濡傛灉NormolRoutine涔熶笉涓虹┖錛岄偅涔圞ernelRoutine閮藉湪NormolRoutine琚皟鐢ㄥ墠琚皟鐢紒錛?/p>

涓婃枃涓鍒版姇閫扷ser Mode APCs鏄緢鐗規畩鐨勶紝閬撶悊寰堢畝鍗曪紝鍥犱負User Mode APC鏄痳ing3涓嬬殑鍥炶皟鍑芥暟錛屾樉鐒秗ing0涓殑KiDeliverAPC錛堬級涓嶈兘鍍廗ernel Mode APC閭f牱鐩存帴call錛屽繀欏昏鍏堝洖鍒皉ing3鐜涓嬨傚綋鐒朵笉鑳藉儚鏅氭儏鍐甸偅鏍瘋繑鍥烇紙鍚﹀垯灝卞洖鍒皉ing3緋葷粺璋冪敤鐨勫湴鏂逛簡錛夛紝鍙湁涓涓姙娉曪紝閭e氨鏄慨鏀筎rapFrame 錛屾楠楃郴緇熻繑鍥?#8220;APC鍥炶皟鍑芥暟”錛並iInitializeUserApc灝辨槸榪欎箞鍋氱殑錛?/p>

璇ュ嚱鏁伴鍏堟妸TrapFrame杞寲涓篊ontextFrame錛岀劧鍚庣Щ鍔ㄧ敤鎴鋒丒SP鎸囬拡錛屽垎閰嶅ぇ綰izeof錛圕ONTEXT錛?sizeof錛圞APC_RECORD錛変釜瀛楄妭:

UserStack-> ……

KAPC_RECORD

……

……

CONTEXT

TopOfStack-> ……

KAPC_RECORD灝辨槸KiInitializeUserApc鐨勬渶鍚庡洓涓弬鏁?/p>

nt!_KAPC_RECORD

+0x000 NormalRoutine : Ptr32 void

+0x004 NormalContext : Ptr32 Void

+0x008 SystemArgument1 : Ptr32 Void

+0x00c SystemArgument2 : Ptr32 Void

CONTEXT緇撴瀯涓昏鏉ュ瓨鏀捐淇敼鍓嶇殑TrapFrame錛屼箣鎵浠ョ敤CONTEXT緇撴瀯鏄窡APC鍑芥暟榪斿洖鏈夊叧錛?/p>

TrapFrame->HardwareEsp = UserStack;

TrapFrame->Eip = (ULONG)KeUserApcDispatcher;

TrapFrame->ErrCode = 0;

浠庝笂闈㈢殑浠g爜鐪嬪埌紜疄淇敼浜員rapFrame錛屽茍涓旇繑鍥炲埌鐨勬槸ring3涓嬬殑KeUserApcDispatcher錛屽垰鎵嶈鐨刜KAPC_RECORD鍏跺疄涔熸槸瀹冪殑鍙傛暟錛佺湡姝f垜浠殑User APC鍥炶皟鍑芥暟鏄敱KeUserApcDispatcher璋冪敤鐨勶紒

.func KiUserApcDispatcher@16

.globl _KiUserApcDispatcher@16

_KiUserApcDispatcher@16:

/* Setup SEH stack */

lea eax, [esp+CONTEXT_ALIGNED_SIZE+16]

mov ecx, fs:[TEB_EXCEPTION_LIST]

mov edx, offset _KiUserApcExceptionHandler

mov [eax], ecx

mov [eax+4], edx

/* Enable SEH */

mov fs:[TEB_EXCEPTION_LIST], eax

/* Put the Context in EDI */

pop eax

lea edi, [esp+12]

/* Call the APC Routine */

call eax

/* Restore exception list */

mov ecx, [edi+CONTEXT_ALIGNED_SIZE]

mov fs:[TEB_EXCEPTION_LIST], ecx

/* Switch back to the context */

push 1 ; TestAlert

push edi ;edi->CONTEXT緇撴瀯

call _ZwContinue@8

;;涓嶄細榪斿洖鍒拌繖閲岀殑

涓婇潰鐨勪唬鐮佸茍涓嶉毦鐞嗚В錛屾垜浠殑User APC鍥炶皟鍑芥暟榪斿洖鍚庯紝绔嬪嵆璋冪敤浜哯wContinue錛岃繖鏄釜ntdll涓殑瀵煎嚭鍑芥暟錛岃繖涓嚱鏁板張閫氳繃緋葷粺璋冪敤榪涘叆kernel涓殑NtContinue錛?/p>

NTSTATUS

; NtContinue (

; IN PCONTEXT ContextRecord,

; IN BOOLEAN TestAlert

; )

;

; Routine Description:

;

; This routine is called as a system service to continue execution after

; an exception has occurred. Its function is to transfer information from

; the specified context record into the trap frame that was built when the

; system service was executed, and then exit the system as if an exception

; had occurred.

;

; WARNING - Do not call this routine directly, always call it as

; ZwContinue!!! This is required because it needs the

; trapframe built by KiSystemService.

;

; Arguments:

;

; KTrapFrame (ebp+0: after setup) -> base of KTrapFrame

;

; ContextRecord (ebp+8: after setup) = Supplies a pointer to a context rec.

;

; TestAlert (esp+12: after setup) = Supplies a boolean value that specifies

; whether alert should be tested for the previous processor mode.

;

; Return Value:

;

; Normally there is no return from this routine. However, if the specified

; context record is misaligned or is not accessible, then the appropriate

; status code is returned.

;

;--

NcTrapFrame equ [ebp + 0]

NcContextRecord equ [ebp + 8]

NcTestAlert equ [ebp + 12]

align dword

cPublicProc _NtContinue ,2

push ebp ;ebp->TrapFrame

;

; Restore old trap frame address since this service exits directly rather

; than returning.

;

mov ebx, PCR[PcPrcbData+PbCurrentThread] ; get current thread address

mov edx, [ebp].TsEdx ; restore old trap frame address

mov [ebx].ThTrapFrame, edx ;

;

; Call KiContinue to load ContextRecord into TrapFrame. On x86 TrapFrame

; is an atomic entity, so we don't need to allocate any other space here.

;

; KiContinue(NcContextRecord, 0, NcTrapFrame)

;

mov ebp,esp

mov eax, NcTrapFrame

mov ecx, NcContextRecord

stdCall _KiContinue, <ecx, 0, eax>

or eax,eax ; return value 0?

jnz short Nc20 ; KiContinue failed, go report error

;

; Check to determine if alert should be tested for the previous processor mode.

;

cmp byte ptr NcTestAlert,0 ; Check test alert flag

je short Nc10 ; if z, don't test alert, go Nc10

mov al,byte ptr [ebx]+ThPreviousMode ; No need to xor eax, eax.

stdCall _KeTestAlertThread, <eax> ; test alert for current thread

;濡傛灉User APCs涓嶄負絀猴紝瀹冧細璁劇疆UserApcPending,

;璺烝lertable鏃犲叧

Nc10: pop ebp ; (ebp) -> TrapFrame

mov esp,ebp ; (esp) = (ebp) -> trapframe

jmp _KiServiceExit2 ; common exit

Nc20: pop ebp ; (ebp) -> TrapFrame

mov esp,ebp ; (esp) = (ebp) -> trapframe

jmp _KiServiceExit ; common exit

stdENDP _NtContinue

NtContinue鎶奀ONTEXT緇撴瀯杞寲鎴怲rapFrame錛堝洖澶嶅師鏉ョ殑闄烽槺甯э級錛岀劧鍚庡氨浠嶬iServiceExit2澶勯鍑虹郴緇熻皟鐢紒

;++

;

; _KiServiceExit2 - same as _KiServiceExit BUT the full trap_frame

; context is restored

;

;--

public _KiServiceExit2

_KiServiceExit2:

cli ; disable interrupts

DISPATCH_USER_APC ebp

;

; Exit from SystemService

;

EXIT_ALL ; RestoreAll

KiServiceExit2璺烱iServiceExit宸笉澶氾紝鍙槸瀹忓弬鏁扮殑涓嶅悓!鍚屾牱濡傛灉榪樻湁User APC鍙堜細榪涘叆涓婃枃鎻忚堪鐨勬儏褰紝鐩村埌娌℃湁User APC錛岃嚦姝ゆ墠浼氳繑鍥炵湡姝e彂璧峰師濮嬬郴緇熻皟鐢ㄧ殑鍦版柟錛?/p>


鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/better0332/archive/2009/06/29/4306683.aspx



]]>
[zt]璋堣皥瀵笰PC鐨勪竴鐐圭悊瑙?/title><link>http://www.shnenglu.com/shaker/archive/2011/05/05/145731.html</link><dc:creator>shaker(澶瓙)</dc:creator><author>shaker(澶瓙)</author><pubDate>Thu, 05 May 2011 03:46:00 GMT</pubDate><guid>http://www.shnenglu.com/shaker/archive/2011/05/05/145731.html</guid><wfw:comment>http://www.shnenglu.com/shaker/comments/145731.html</wfw:comment><comments>http://www.shnenglu.com/shaker/archive/2011/05/05/145731.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/shaker/comments/commentRss/145731.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/shaker/services/trackbacks/145731.html</trackback:ping><description><![CDATA[<span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; FONT: 16px Arial,Microsoft Yahei,Simsun,sans-serif; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(83,100,130); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class=Apple-style-span><span style="LINE-HEIGHT: 18px; FONT-FAMILY: 'Lucida Grande', 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif; COLOR: rgb(51,51,51); FONT-SIZE: 13px" class=Apple-style-span>寮傛榪囩▼璋冪敤(APCs) 鏄疦T寮傛澶勭悊浣撶郴緇撴瀯涓殑涓涓熀紜閮ㄥ垎錛岀悊瑙d簡瀹冿紝瀵逛簬浜嗚ВNT鎬庢牱鎿嶄綔鍜屾墽琛屽嚑涓牳蹇冪殑緋葷粺鎿嶄綔寰堟湁甯姪銆?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">1) APCs鍏佽鐢ㄦ埛紼嬪簭鍜岀郴緇熷厓浠跺湪涓涓繘紼嬬殑鍦板潃絀洪棿鍐呮煇涓嚎紼嬬殑涓婁笅鏂囦腑鎵ц浠g爜銆?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">2) I/O綆$悊鍣ㄤ嬌鐢ˋPCs鏉ュ畬鎴愪竴涓嚎紼嬪彂璧風殑寮傛鐨処/O鎿嶄綔銆備緥濡傦細褰撲竴涓澶囬┍鍔ㄨ皟鐢↖oCompleteRequest鏉ラ氱煡I/O綆$悊鍣紝瀹冨凡緇忕粨鏉熷鐞嗕竴涓紓姝/O璇鋒眰鏃訛紝I/O綆$悊鍣ㄦ帓闃熶竴涓猘pc鍒板彂璧瘋姹傜殑綰跨▼銆傜劧鍚庣嚎紼嬪湪涓涓緝浣嶪RQL綰у埆錛屾潵鎵цAPC. APC鐨勪綔鐢ㄦ槸浠庣郴緇熺┖闂存嫹璐滻/O鎿嶄綔緇撴灉鍜岀姸鎬佷俊鎭埌綰跨▼铏氭嫙鍐呭瓨絀洪棿鐨勪竴涓紦鍐蹭腑銆?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">3) 浣跨敤APC鍙互寰楀埌鎴栬呰緗竴涓嚎紼嬬殑涓婁笅鏂囧拰鎸傝搗綰跨▼鐨勬墽琛屻?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">灝界APCs鍦╪t浣撶郴緇撴瀯涓嬭騫挎硾浣跨敤錛屼絾鏄叧浜庢庢牱浣跨敤瀹冪殑鏂囨。鍗撮潪甯哥殑緙轟箯銆傛湰綃囨垜浠緇嗕粙緇嶄笅nt緋葷粺鏄庢牱澶勭悊APCs鐨勶紝騫朵笖璁板綍瀵煎嚭鐨刵t鍑芥暟錛屾柟渚胯澶囬┍鍔ㄥ紑鍙戣呭湪浠栦滑鐨勭▼搴忎腑浣跨敤APCs銆傛垜涔熶細灞曠ず涓涓潪甯稿彲闈犵殑NT鐨凙PC璋冨害瀛愮▼搴廗iDeliverApc鐨勫疄鐜幫紝鏉ュ府鍔╀綘鏇村ソ鐨勬帉鎻PC璋冨害鐨勫唴騫曘?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">APC瀵硅薄<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">鍦∟T涓紝鏈変袱縐嶇被鍨嬬殑APCs錛氱敤鎴鋒ā寮忓拰鍐呮牳妯″紡銆傜敤鎴稟PCs榪愯鍦ㄧ敤鎴鋒ā寮忎笅鐩爣綰跨▼褰撳墠涓婁笅鏂囦腑錛屽茍涓旈渶瑕佷粠鐩爣綰跨▼寰楀埌璁稿彲鏉ヨ繍琛屻傜壒鍒槸錛岀敤鎴鋒ā寮忕殑APCs闇瑕佺洰鏍囩嚎紼嬪鍦╝lertable絳夊緟鐘舵佹墠鑳借鎴愬姛鐨勮皟搴︽墽琛屻傞氳繃璋冪敤涓嬮潰浠繪剰涓涓嚱鏁幫紝閮藉彲浠ヨ綰跨▼榪涘叆榪欑鐘舵併傝繖浜涘嚱鏁版槸錛欿eWaitForSingleObject, KeWaitForMultipleObjects, KeWaitForMutexObject, KeDelayExecutionThread銆?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">瀵逛簬鐢ㄦ埛妯″紡涓嬶紝鍙互璋冪敤鍑芥暟SleepEx, SignalObjectAndWait, WaitForSingleObjectEx, WaitForMultipleObjectsEx,MsgWaitForMultipleObjectsEx 閮藉彲浠ヤ嬌鐩爣綰跨▼澶勪簬alertable絳夊緟鐘舵侊紝浠庤岃鐢ㄦ埛妯″紡APCs鎵ц,鍘熷洜鏄繖浜涘嚱鏁版渶緇堥兘鏄皟鐢ㄤ簡鍐呮牳涓殑KeWaitForSingleObject, KeWaitForMultipleObjects, KeWaitForMutexObject, KeDelayExecutionThread絳夊嚱鏁般傚彟澶栭氳繃璋冪敤涓涓湭鍏紑鐨刟lert-test鏈嶅姟KeTestAlertThread錛岀敤鎴風嚎紼嬪彲浠ヤ嬌鐢ㄦ埛妯″紡APCs鎵ц銆?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">褰撲竴涓敤鎴鋒ā寮廇PC琚姇閫掑埌涓涓嚎紼嬶紝璋冪敤涓婇潰鐨勭瓑寰呭嚱鏁幫紝濡傛灉榪斿洖絳夊緟鐘舵丼TATUS_USER_APC錛屽湪榪斿洖鐢ㄦ埛妯″紡鏃訛紝鍐呮牳杞幓鎺у埗APC渚嬬▼錛屽綋APC渚嬬▼瀹屾垚鍚庯紝鍐嶇戶緇嚎紼嬬殑鎵ц.<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">鍜岀敤鎴鋒ā寮廇PCs姣旇緝錛屽唴鏍告ā寮廇PCs鎵ц鍦ㄥ唴鏍告ā寮忎笅銆傚彲浠ヨ鍒掑垎涓哄父瑙勭殑鍜岀壒孌婄殑涓ょ被銆傚綋APCs琚姇閫掑埌涓涓壒孌婄殑綰跨▼錛岀壒孌婄殑鍐呮牳妯″紡APCs涓嶉渶瑕佷粠綰跨▼寰楀埌璁稿彲鏉ヨ繍琛屻傜劧鑰岋紝甯歌鐨勫唴鏍告ā寮廇PCs鍦ㄤ粬浠垚鍔熸墽琛屽墠錛岄渶瑕佹湁鐗瑰畾鐨勭幆澧冦傛澶栵紝鐗規畩鐨勫唴鏍窤PC琚敖鍙兘蹇湴鎵ц錛屾棦鍙APC_LEVEL綰т笂鏈夊彲璋冨害鐨勬椿鍔ㄣ傚湪寰堝鎯呭喌涓嬶紝鐗規畩鐨勫唴鏍窤PC鐢氳嚦鑳藉敜閱掗樆濉炵殑綰跨▼銆傛櫘閫氱殑鍐呮牳APC浠呭湪鎵鏈夌壒孌夾PC閮借鎵ц瀹岋紝騫朵笖鐩爣綰跨▼浠嶅湪榪愯錛屽悓鏃惰綰跨▼涓篃娌℃湁鍏跺畠鍐呮牳妯″紡APC姝f墽琛屾椂鎵嶆墽琛屻傜敤鎴鋒ā寮廇PC鍦ㄦ墍鏈夊唴鏍告ā寮廇PC鎵ц瀹屽悗鎵嶆墽琛岋紝騫朵笖浠呭湪鐩爣綰跨▼鏈塧lertable灞炴ф椂鎵嶆墽琛屻?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">姣忎竴涓瓑寰呮墽琛岀殑APC閮藉瓨鍦ㄤ簬涓涓嚎紼嬫墽琛屼綋錛岀敱鍐呮牳綆$悊鐨勯槦鍒椾腑銆傜郴緇熶腑鐨勬瘡涓涓嚎紼嬮兘鍖呭惈涓や釜APC闃熷垪錛屼竴涓槸涓虹敤鎴鋒ā寮廇PCs,鍙︿竴涓槸涓哄唴鏍告ā寮廇PCs鐨勩?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">NT閫氳繃涓涓垚涓篕APC鐨勫唴鏍告帶鍒跺璞℃潵鎻忚堪涓涓肌錛幫跡錛庡敖綆★激錛わ極涓病鏈夋槑紜殑鏂囨。鍖栵肌錛幫跡锝擄紝浣嗘槸鍦∟TDDK.H涓嵈闈炲父娓呮鐨勫畾涔変簡錛★及錛e璞°備粠涓嬮潰鐨凨APC瀵硅薄鐨勫畾涔夌湅錛屾湁浜涙槸涓嶉渶瑕佽鏄庣殑銆傚儚Type鍜孲ize銆俆ype琛ㄧず浜嗚繖鏄竴涓狝PC鍐呮牳瀵硅薄銆傚湪nt涓紝姣忎竴涓唴鏍稿璞℃垨鑰呮墽琛屼綋瀵硅薄閮芥湁Type鍜孲ize榪欎袱涓煙銆傜敱姝ゅ鐞嗗嚱鏁板彲浠ョ‘瀹氬綋鍓嶅鐞嗙殑瀵硅薄銆係ize琛ㄧず涓涓瓧瀵歸綈鐨勭粨鏋勪綋鐨勫ぇ灝忋備篃灝辨槸鎸囨槑浜嗗璞″崰鐨勫唴瀛樼┖闂村ぇ灝忋係pare0鐪嬭搗鏉ユ湁浜涙櫐娑╅毦鎳傦紝浣嗘槸瀹冩槸娌$敤浠涔堜換浣曟繁榪滅殑鎰忎箟錛屼粎浠呮槸涓轟簡鍐呭瓨琛ラ綈銆傚叾浠栫殑鍩熷皢鍦ㄤ笅闈㈢殑綃囧箙涓粙緇嶃?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">//-------------------------------------------------------------------------------------------------------<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">鍑犱釜鍑芥暟澹版槑鍜岀粨鏋勫畾涔夛細<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">typedef struct _KAPC {<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">CSHORT Type;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">CSHORT Size;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">ULONG Spare0;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">struct _KTHREAD *Thread;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">LIST_ENTRY ApcListEntry;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">PKKERNEL_ROUTINE KernelRoutine;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">PKRUNDOWN_ROUTINE RundownRoutine;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">PKNORMAL_ROUTINE NormalRoutine;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">PVOID NormalContext;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">//<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">// N.B. The following two members MUST be together.<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">//<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">PVOID SystemArgument1;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">PVOID SystemArgument2;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">CCHAR ApcStateIndex;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">KPROCESSOR_MODE ApcMode;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">BOOLEAN Inserted;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">} KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">//------<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">APC鐜<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">涓涓嚎紼嬪湪瀹冩墽琛岀殑浠繪剰鏃跺埢錛屽亣璁懼綋鍓嶇殑IRQL鏄湪Passive綰э紝瀹冨彲鑳介渶瑕佷復鏃跺湪鍏朵粬鐨勮繘紼嬩笂涓嬫枃涓墽琛屼唬鐮侊紝涓轟簡瀹屾垚榪欎釜鎿嶄綔錛岀嚎紼嬭皟鐢ㄧ郴緇熷姛鑳藉嚱鏁癒eAttachProcess錛屽湪浠庤繖涓皟鐢ㄨ繑鍥炴椂錛岀嚎紼嬫墽琛屽湪鍙︿竴涓繘紼嬬殑鍦板潃絀洪棿銆傚厛鍓嶆墍鏈夊湪綰跨▼鑷繁鐨勮繘紼嬩笂涓嬫枃涓瓑寰呮墽琛岀殑APCs,鐢變簬榪欐椂鍏舵墍灞炶繘紼嬬殑鍦板潃絀洪棿涓嶆槸褰撳墠鍙敤鐨勶紝鍥犳浠栦滑涓嶈兘琚姇閫掓墽琛屻傜劧鑰岋紝鏂扮殑鎻掑叆鍒拌繖涓嚎紼嬬殑APCs鍙互鎵ц鍦ㄨ繖涓柊鐨勮繘紼嬬┖闂淬傜敋鑷沖綋綰跨▼鏈鍚庝粠鏂扮殑榪涚▼涓垎紱繪椂錛屾柊鐨勬彃鍏ュ埌榪欎釜綰跨▼鐨凙PCs榪樺彲浠ュ湪榪欎釜綰跨▼鎵灞炵殑榪涚▼涓婁笅鏂囦腑鎵ц銆?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">涓轟簡杈懼埌鎺у埗APC浼犻佺殑榪欎釜紼嬪害錛孨T涓瘡涓嚎紼嬬淮鎶や簡涓や釜APC鐜鎴栬呰鏄姸鎬併傛瘡涓涓狝PC鐜鍖呭惈浜嗙敤鎴鋒ā寮忕殑APC闃熷垪鍜屽唴鏍告ā寮忕殑APC闃熷垪錛屼竴涓寚鍚戝綋鍓嶈繘紼嬪璞$殑鎸囬拡鍜屼笁涓帶鍒跺彉閲忥紝鐢ㄤ簬鎸囧嚭錛氭槸鍚︽湁鏈喅鐨勫唴鏍告ā寮廇PCs(KernelApcPending),鏄惁鏈夊父瑙勫唴鏍告ā寮廇PC鍦ㄨ繘琛屼腑(KernelApcInProgress)錛屾槸鍚︽湁鏈喅鐨勭敤鎴鋒ā寮忕殑APC(UserApcPending). 榪欎簺APC鐨勭幆澧冧繚瀛樺湪綰跨▼瀵硅薄鐨凙pcStatePointer鍩熶腑銆傝繖涓煙鏄敱2涓厓绱犵粍鎴愮殑鏁扮粍銆傚嵆錛?0x138 ApcStatePointer : [2] Ptr32 _KAPC_STATE<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">typedef struct _KAPC_STATE {<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">LIST_ENTRY ApcListHead[MaximumMode];<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">struct _KPROCESS *Process;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">BOOLEAN KernelApcInProgress;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">BOOLEAN KernelApcPending;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">BOOLEAN UserApcPending;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">} KAPC_STATE, *PKAPC_STATE, *PRKAPC_STATE;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">lkd> dt _kthread<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">ntdll!_KTHREAD<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x000 Header : _DISPATCHER_HEADER<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x010 MutantListHead : _LIST_ENTRY<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x018 InitialStack : Ptr32 Void<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x01c StackLimit : Ptr32 Void<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x020 Teb : Ptr32 Void<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x024 TlsArray : Ptr32 Void<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x028 KernelStack : Ptr32 Void<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x02c DebugActive : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x02d State : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x02e Alerted : [2] UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x030 Iopl : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x031 NpxState : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x032 Saturation : Char<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x033 Priority : Char<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x034 ApcState : _KAPC_STATE<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x04c ContextSwitches : Uint4B<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x050 IdleSwapBlock : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x051 Spare0 : [3] UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x054 WaitStatus : Int4B<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x058 WaitIrql : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x059 WaitMode : Char<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x05a WaitNext : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x05b WaitReason : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x05c WaitBlockList : Ptr32 _KWAIT_BLOCK<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x060 WaitListEntry : _LIST_ENTRY<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x060 SwapListEntry : _SINGLE_LIST_ENTRY<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x068 WaitTime : Uint4B<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x06c BasePriority : Char<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x06d DecrementCount : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x06e PriorityDecrement : Char<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x06f Quantum : Char<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x070 WaitBlock : [4] _KWAIT_BLOCK<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x0d0 LegoData : Ptr32 Void<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x0d4 KernelApcDisable : Uint4B<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x0d8 UserAffinity : Uint4B<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x0dc SystemAffinityActive : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x0dd PowerState : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x0de NpxIrql : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x0df InitialNode : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x0e0 ServiceTable : Ptr32 Void<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x0e4 Queue : Ptr32 _KQUEUE<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x0e8 ApcQueueLock : Uint4B<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x0f0 Timer : _KTIMER<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x118 QueueListEntry : _LIST_ENTRY<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x120 SoftAffinity : Uint4B<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x124 Affinity : Uint4B<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x128 Preempted : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x129 ProcessReadyQueue : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x12a KernelStackResident : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x12b NextProcessor : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x12c CallbackStack : Ptr32 Void<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x130 Win32Thread : Ptr32 Void<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x134 TrapFrame : Ptr32 _KTRAP_FRAME<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x138 ApcStatePointer : [2] Ptr32 _KAPC_STATE<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x140 PreviousMode : Char<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x141 EnableStackSwap : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x142 LargeStack : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x143 ResourceIndex : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x144 KernelTime : Uint4B<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x148 UserTime : Uint4B<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x14c SavedApcState : _KAPC_STATE<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x164 Alertable : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x165 ApcStateIndex : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x166 ApcQueueable : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x167 AutoAlignment : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x168 StackBase : Ptr32 Void<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x16c SuspendApc : _KAPC<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x19c SuspendSemaphore : _KSEMAPHORE<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x1b0 ThreadListEntry : _LIST_ENTRY<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x1b8 FreezeCount : Char<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x1b9 SuspendCount : Char<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x1ba IdealProcessor : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x1bb DisableBoost : UChar<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">涓籄PC鐜鏄綅浜庣嚎紼嬪璞$殑ApcState 鍩燂紝鍗籌細<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">+0x034 ApcState : _KAPC_STATE<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">綰跨▼涓瓑寰呭湪褰撳墠榪涚▼涓婁笅鏂囦腑鎵ц鐨凙PC淇濆瓨鍦ˋpcState鐨勯槦鍒椾腑銆傛棤璁轟綍鏃訛紝NT鐨凙PC媧懼彂鍣?dispatcher)鍜屽叾浠栫郴緇熷厓浠舵煡璇竴涓嚎紼嬫湭鍐崇殑APCs鏃? 浠栦滑閮戒細媯鏌ヤ富APC鐜錛屽鏋滆繖閲屾湁浠諱綍鏈喅鐨凙PCs,灝變細椹笂琚姇閫掞紝鎴栬呬慨鏀瑰畠鐨勬帶鍒跺彉閲忕◢鍚庢姇閫掋?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">絎簩涓狝PC鐜鏄綅浜庣嚎紼嬪璞$殑SavedApcState鍩燂紝褰撶嚎紼嬩復鏃舵寕鎺ュ埌鍏朵粬榪涚▼鏃訛紝瀹冩槸鐢ㄦ潵澶囦喚涓籄PC鐜鐨勩?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">褰撲竴涓嚎紼嬭皟鐢↘eAttachProcess錛屽湪鍙﹀鐨勮繘紼嬩笂涓嬫枃涓墽琛屽悗緇殑浠g爜鏃訛紝ApcState鍩熺殑鍐呭灝辮鎷瘋礉鍒癝avedApcState鍩熴傜劧鍚嶢pcState鍩熻娓呯┖錛屽畠鐨凙PC闃熷垪閲嶆柊鍒濆鍖栵紝鎺у埗鍙橀噺璁劇疆涓?錛屽綋鍓嶈繘紼嬪煙璁劇疆涓烘柊鐨勮繘紼嬨傝繖浜涙楠ゆ垚鍔熺殑紜繚鍏堝墠鍦ㄧ嚎紼嬫墍灞炵殑榪涚▼涓婁笅鏂囧湴鍧絀洪棿涓瓑寰呯殑APCs錛屽綋綰跨▼榪愯鍦ㄥ叾瀹冧笉鍚岀殑榪涚▼涓婁笅鏂囨椂錛岃繖浜汚PCs涓嶈浼犻佹墽琛屻傞殢鍚庯紝ApcStatePointer鍩熸暟緇勫唴瀹硅鏇存柊鏉ュ弽鏄犳柊鐨勭姸鎬侊紝鏁扮粍涓涓涓厓绱犳寚鍚慡avedApcState鍩燂紝絎簩涓厓绱犳寚鍚慉pcState鍩燂紝琛ㄦ槑綰跨▼鎵灞炶繘紼嬩笂涓嬫枃鐨凙PC鐜浣嶄簬SavedApcState鍩熴傜嚎紼嬬殑鏂扮殑榪涚▼涓婁笅鏂囩殑APC鐜浣嶄簬ApcState鍩熴傛渶鍚庯紝褰撳墠榪涚▼涓婁笅鏂囧垏鎹㈠埌鏂扮殑榪涚▼涓婁笅鏂囥?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">瀵逛簬涓涓狝PC瀵硅薄錛屽喅瀹氬綋鍓岮PC鐜鐨勬槸ApcStateIndex鍩熴侫pcStateIndex鍩熺殑鍊間綔涓篈pcStatePointer鍩熸暟緇勭殑绱㈠紩鏉ュ緱鍒扮洰鏍嘇PC鐜鎸囬拡銆傞殢鍚庯紝鐩爣APC鐜鎸囬拡鐢ㄦ潵鍦ㄧ浉搴旂殑闃熷垪涓瓨鏀綼pc瀵硅薄.<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">褰撶嚎紼嬩粠鏂扮殑榪涚▼涓劚紱繪椂(KeDetachProcess), 浠諱綍鍦ㄦ柊鐨勮繘紼嬪湴鍧絀洪棿涓瓑寰呮墽琛岀殑鏈喅鐨勫唴鏍窤PCs琚淳鍙戞墽琛屻傞殢鍚嶴avedApcState 鍩熺殑鍐呭琚嫹璐濆洖ApcState鍩熴係avedApcState 鍩熺殑鍐呭琚竻絀猴紝綰跨▼鐨凙pcStateIndex鍩熻璁句負OriginalApcEnvironment錛孉pcStatePointer鍩熸洿鏂幫紝褰撳墠榪涚▼涓婁笅鏂囧垏鎹㈠埌綰跨▼鎵灞炶繘紼嬨?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">浣跨敤APCs<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">璁懼椹卞姩紼嬪簭浣跨敤涓や釜涓昏鍑芥暟鏉ュ埄鐢ˋPCs, 絎竴涓槸KeInitializeApc錛岀敤鏉ュ垵濮嬪寲APC瀵硅薄銆傝繖涓嚱鏁版帴鍙椾竴涓┍鍔ㄥ垎閰嶇殑APC瀵硅薄錛屼竴涓洰鏍囩嚎紼嬪璞℃寚閽堬紝APC鐜绱㈠紩錛堟寚鍑篈PC瀵硅薄瀛樻斁浜庡摢涓狝PC鐜錛夛紝APC鐨刱ernel,rundown鍜宯ormal渚嬬▼鎸囬拡錛孉PC綾誨瀷錛堢敤鎴鋒ā寮忔垨鑰呭唴鏍告ā寮忥級鍜屼竴涓笂涓嬫枃鍙傛暟銆?鍑芥暟澹版槑濡備笅錛?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">NTKERNELAPI<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">VOID<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">KeInitializeApc (<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN PRKAPC Apc,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN PKTHREAD Thread,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN KAPC_ENVIRONMENT Environment,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN PKKERNEL_ROUTINE KernelRoutine,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN PKRUNDOWN_ROUTINE RundownRoutine OPTIONAL,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN PKNORMAL_ROUTINE NormalRoutine OPTIONAL,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN KPROCESSOR_MODE ApcMode,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN PVOID NormalContext<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">);<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">typedef enum _KAPC_ENVIRONMENT {<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">OriginalApcEnvironment,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">AttachedApcEnvironment,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">CurrentApcEnvironment<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">} KAPC_ENVIRONMENT;<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">KeInitializeApc 棣栧厛璁劇疆APC瀵硅薄鐨凾ype鍜孲ize鍩熶竴涓傚綋鐨勫鹼紝鐒跺悗媯鏌ュ弬鏁癊nvironment鐨勫鹼紝濡傛灉鏄疌urrentApcEnvironment錛岄偅涔圓pcStateIndex鍩熻緗負鐩爣綰跨▼鐨凙pcStateIndex鍩熴傚惁鍒欙紝ApcStateIndex鍩熻緗負鍙傛暟Environment鐨勫箋傞殢鍚庯紝鍑芥暟鐩存帴鐢ㄥ弬鏁拌緗瓵PC瀵硅薄Thread錛孯undownRoutine錛孠ernelRoutine鍩熺殑鍊箋備負浜嗘紜湴紜畾APC鐨勭被鍨嬶紝KeInitializeApc 媯鏌ュ弬鏁癗ormalRoutine鐨勫鹼紝濡傛灉鏄疦ULL錛孉pcMode鍩熺殑鍊艱緗負KernelMode錛孨ormalContext鍩熻緗負NULL銆傚鏋淣ormalRoutine鐨勫間笉鏄疦ULL錛岃繖鏃跺欏畠涓瀹氭寚鍚戜竴涓湁鏁堢殑渚嬬▼錛屽氨鐢ㄧ浉搴旂殑鍙傛暟鏉ヨ緗瓵pcMode鍩熷拰NormalContext鍩熴傛渶鍚庯紝KeInitializeApc 璁劇疆Inserted鍩熶負FALSE.鐒惰屽垵濮嬪寲APC瀵硅薄錛屽茍娌℃湁鎶婂畠瀛樻斁鍒扮浉搴旂殑APC闃熷垪涓?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">浠庤繖涓В閲婄湅錛屼綘鍙互浜嗚В鍒癆PCs瀵硅薄濡傛灉緙哄皯鏈夋晥鐨凬ormalRoutine錛屽氨浼氳褰撲綔鍐呮牳妯″紡APCs.灝ゅ叾鏄畠浠細琚涓烘槸鐗規畩鐨勫唴鏍告ā寮廇PCs.<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">瀹為檯涓婏紝I/O綆$悊鍣ㄥ氨鏄敤榪欑被鐨凙PC鏉ュ畬鎴愬紓姝/O鎿嶄綔銆傜浉鍙嶅湴錛孉PC瀵硅薄瀹氫箟浜嗘湁鏁堢殑NormalRoutine錛屽茍涓擜pcMode鍩熸槸KernelMode錛屽氨浼氳褰撲綔甯歌鐨勫唴鏍告ā寮廇PCs,鍚﹀垯灝變細琚綋浣滄槸鐢ㄦ埛妯″紡APCs. NTDDK.H涓璌ernelRoutine, RundownRoutine, and NormalRoutine 鐨勫畾涔夊涓嬶細<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">typedef<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">VOID<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">(*PKKERNEL_ROUTINE) (<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN struct _KAPC *Apc,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN OUT PKNORMAL_ROUTINE *NormalRoutine,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN OUT PVOID *NormalContext,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN OUT PVOID *SystemArgument1,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN OUT PVOID *SystemArgument2<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">);<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">typedef<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">VOID<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">(*PKRUNDOWN_ROUTINE) (<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN struct _KAPC *Apc<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">);<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">typedef<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">VOID<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">(*PKNORMAL_ROUTINE) (<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN PVOID NormalContext,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN PVOID SystemArgument1,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN PVOID SystemArgument2<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">);<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">//------------------<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">閫氬父錛屾棤璁烘槸浠涔堢被鍨嬶紝姣忎釜APC瀵硅薄蹇呴』瑕佸寘鍚竴涓湁鏁堢殑KernelRoutine 鍑芥暟鎸囬拡銆傚綋榪欎釜APC琚玁T鐨凙PC dispatcher浼犻佹墽琛屾椂錛岃繖涓緥紼嬮鍏堣鎵ц銆傜敤鎴鋒ā寮忕殑APCs蹇呴』鍖呭惈涓涓湁鏁堢殑NormalRoutine 鍑芥暟鎸囬拡錛岃繖涓嚱鏁板繀欏誨湪鐢ㄦ埛鍐呭瓨鍖哄煙銆傚悓鏍風殑錛屽父瑙勫唴鏍告ā寮廇PCs涔熷繀欏誨寘鍚竴涓湁鏁堢殑NormalRoutine錛屼絾鏄畠灝卞儚KernelRoutine涓鏍瘋繍琛屽湪鍐呮牳妯″紡銆備綔涓哄彲閫夋嫨鐨勶紝浠繪剰綾誨瀷鐨凙PC閮藉彲浠ュ畾涔変竴涓湁鏁堢殑RundownRoutine錛岃繖涓緥紼嬪繀欏誨湪鍐呮牳鍐呭瓨鍖哄煙錛屽茍涓斾粎浠呭綋緋葷粺闇瑕侀噴鏀続PC闃熷垪鐨勫唴瀹規椂錛屾墠琚皟鐢ㄣ備緥濡傜嚎紼嬮鍑烘椂錛屽湪榪欑鎯呭喌涓嬶紝KernelRoutine鍜孨ormalRoutine閮戒笉鎵ц錛屽彧鏈塕undownRoutine鎵ц銆傛病鏈夎繖涓緥紼嬬殑APC瀵硅薄浼氳鍒犻櫎銆?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">璁頒綇錛屾姇閫扐PCs鍒頒竴涓嚎紼嬬殑鍔ㄤ綔錛屼粎浠呮槸鎿嶄綔緋葷粺璋冪敤KiDeliverApc瀹屾垚鐨勩傛墽琛孉PC瀹為檯涓婂氨鏄皟鐢ˋPC鍐呯殑渚嬬▼銆?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">涓鏃PC瀵硅薄瀹屾垚鍒濆鍖栧悗錛岃澶囬┍鍔ㄨ皟鐢↘eInsertQueueApc鏉ュ皢APC瀵硅薄瀛樻斁鍒扮洰鏍囩嚎紼嬬殑鐩稿簲鐨凙PC闃熷垪涓傝繖涓嚱鏁版帴鍙椾竴涓敱KeInitializeApc瀹屾垚鍒濆鍖栫殑APC瀵硅薄鎸囬拡錛屼袱涓郴緇熷弬鏁板拰涓涓紭鍏堢駭澧為噺銆傝窡浼犻掔粰KeInitializeApc鍑芥暟鐨勫弬鏁癱ontext 涓鏍鳳紝榪欎袱涓郴緇熷弬鏁板彧鏄湪APC鐨勪緥紼嬫墽琛屾椂錛岀畝鍗曠殑浼犻掔粰APC鐨勪緥紼嬨?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">NTKERNELAPI<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">BOOLEAN<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">KeInsertQueueApc (<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN PRKAPC Apc,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN PVOID SystemArgument1,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN PVOID SystemArgument2,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN KPRIORITY Increment<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">);<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">//-----------------<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">鍦↘eInsertQueueApc 灝咥PC瀵硅薄瀛樻斁鍒扮洰鏍囩嚎紼嬬浉搴旂殑APC闃熷垪涔嬪墠錛屽畠棣栧厛媯鏌ョ洰鏍囩嚎紼嬫槸鍚︽槸APC queueable銆傚鏋滀笉鏄紝鍑芥暟绔嬪嵆榪斿洖FALSE.濡傛灉鏄紝鍑芥暟鐩存帴鐢ㄥ弬鏁拌緗甋ystemArgument1鍩熷拰SystemArgument2 鍩燂紝闅忓悗錛屽嚱鏁拌皟鐢↘iInsertQueueApc鏉ュ皢APC瀵硅薄瀛樻斁鍒扮浉搴旂殑APC闃熷垪銆?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">KiInsertQueueApc 浠呬粎鎺ュ彈涓涓狝PC瀵硅薄鍜屼竴涓紭鍏堢駭澧為噺銆傝繖涓嚱鏁伴鍏堝緱鍒扮嚎紼婣PC闃熷垪鐨剆pinlock騫朵笖鎸佹湁瀹冿紝闃叉鍏朵粬綰跨▼淇敼褰撳墠綰跨▼鐨凙PC緇撴瀯銆傞殢鍚庯紝媯鏌PC瀵硅薄鐨処nserted 鍩熴傚鏋滄槸TRUE,琛ㄦ槑榪欎釜APC瀵硅薄宸茬粡瀛樻斁鍒癆PC闃熷垪涓簡錛屽嚱鏁扮珛鍗寵繑鍥濬ALSE.濡傛灉APC瀵硅薄鐨処nserted 鍩熸槸FALSE.鍑芥暟閫氳繃ApcStateIndex鍩熸潵紜畾鐩爣APC鐜錛岀劧鍚庢妸APC瀵硅薄瀛樻斁鍒扮浉搴旂殑APC闃熷垪涓紝鍗沖皢APC瀵硅薄涓殑ApcListEntry 鍩熼摼鍏ュ埌APC鐜鐨凙pcListHead鍩熶腑銆傞摼鍏ョ殑浣嶇疆鐢盇PC鐨勭被鍨嬪喅瀹氥傚父瑙勭殑鍐呮牳妯″紡APC,鐢ㄦ埛妯″紡APC閮芥槸瀛樻斁鍒扮浉搴旂殑APC闃熷垪鐨勬湯绔傜浉鍙嶇殑錛屽鏋滈槦鍒椾腑宸茬粡瀛樻斁浜嗕竴浜汚PC瀵硅薄錛岀壒孌婄殑鍐呮牳妯″紡APC瀛樻斁鍒伴槦鍒椾腑絎竴涓父瑙勫唴鏍告ā寮廇PC瀵硅薄鐨勫墠闈€傚鏋滄槸鍐呮牳瀹氫箟鐨勪竴涓綋綰跨▼閫鍑烘椂浣跨敤鐨勭敤鎴稟PC,瀹冧篃浼氳鏀懼湪鐩稿簲鐨勯槦鍒楃殑鍓嶉潰銆傜劧鍚庯紝綰跨▼鐨勪富APC鐜涓殑UserApcPending鍩熸澂璁劇疆涓篢RUE銆傝繖鏃禟iInsertQueueApc 璁劇疆APC瀵硅薄鐨処nserted 鍩熶負TRUE錛岃〃鏄庤繖涓狝PC瀵硅薄宸茬粡瀛樻斁鍒癆PC闃熷垪涓簡銆傛帴涓嬫潵錛屾鏌ヨ繖涓狝PC瀵硅薄鏄惁琚帓闃熷埌綰跨▼鐨勫綋鍓嶈繘紼嬩笂涓嬫枃APC鐜涓紝濡傛灉涓嶆槸錛屽嚱鏁扮珛鍗寵繑鍥濼RUE銆傚鏋滆繖鏄竴涓唴鏍告ā寮廇PC錛岀嚎紼嬩富APC鐜涓殑KernelApcPending鍩熻緗負TRUE銆?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">鍦╓IN32 SDK鏂囨。涓槸榪欐牱鎻忚堪APCs鐨勶細 褰撲竴涓狝PC琚垚鍔熺殑瀛樻斁鍒板畠鐨勯槦鍒楀悗錛屽彂鍑轟竴涓蔣涓柇錛孉PC灝嗕細鍦ㄧ嚎紼嬭璋冨害榪愯鐨勪笅涓涓椂闂寸墖鎵ц銆傜劧鑰岃繖涓嶆槸瀹屽叏姝g‘鐨勩傝繖鏍蜂竴涓蔣涓柇錛屼粎浠呮槸褰撲竴涓唴鏍告ā寮忕殑APC錛堟棤璁烘槸甯歌鐨勫唴鏍告ā寮廇PC榪樻槸鐗規畩鐨勫唴鏍告ā寮廇PC錛夐拡瀵逛簬璋冪敤綰跨▼鏃訛紝鎵嶄細鍙戝嚭銆傞殢鍚庡嚱鏁拌繑鍥濼RUE銆?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">1錛夊鏋淎PC涓嶆槸閽堝浜庤皟鐢ㄧ嚎紼嬶紝鐩爣綰跨▼鍦≒assive鏉冮檺絳夌駭澶勫湪絳夊緟鐘舵侊紱<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">2錛夎繖鏄竴涓父瑙勫唴鏍告ā寮廇PC<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">3錛夎繖涓嚎紼嬩笉鍐嶄復鐣屽尯<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">4錛夋病鏈夊叾浠栫殑甯歌鍐呮牳妯″紡APC浠嶇劧鍦ㄨ繘琛屼腑<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">閭d箞榪欎釜綰跨▼琚敜閱掞紝榪斿洖鐘舵佹槸STATUS_KERNEL_APC銆備絾鏄瓑寰呯姸鎬佹病鏈塧borted銆?濡傛灉榪欐槸涓涓敤鎴鋒ā寮廇PC錛孠iInsertQueueApc媯鏌ュ垽鏂洰鏍囩嚎紼嬫槸鍚︽槸alertable絳夊緟鐘舵侊紝騫朵笖WaitMode鍩熺瓑浜嶶serMode銆傚鏋滄槸錛屼富APC鐜鐨刄serApcPending 鍩熻緗負TRUE銆傜瓑寰呯姸鎬佽繑鍥濻TATUS_USER_APC錛屾渶鍚庯紝鍑芥暟閲婃斁spinlock錛岃繑鍥濼RUE錛岃〃紺篈PC瀵硅薄宸茬粡琚垚鍔熸斁鍏ラ槦鍒椼?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">鏃╂湡浣滀負APC綆$悊鍑芥暟鐨勮ˉ鍏咃紝璁懼椹卞姩寮鍙戣呭彲浠ヤ嬌鐢ㄦ湭鍏紑鐨勭郴緇熸湇鍔tQueueApcThread鏉ョ洿鎺ュ皢涓涓敤鎴鋒ā寮忕殑APC鎶曢掑埌鏌愪釜綰跨▼銆?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">榪欎釜鍑芥暟鍐呴儴瀹為檯涓婃槸璋冪敤浜咾eInitializeApc 鍜孠eInsertQueueApc 鏉ュ畬鎴愯繖涓換鍔°?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">NTSYSAPI<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">NTSTATUS<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">NTAPI<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">NtQueueApcThread (<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN HANDLE Thread,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN PKNORMAL_ROUTINE NormalRoutine,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN PVOID NormalContext,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN PVOID SystemArgument1,<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">IN PVOID SystemArgument2<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">);<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">NT鐨凙PC媧懼彂鍣?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">NT媯鏌ユ槸鍚︾嚎紼嬫湁鏈喅鐨凙PCs. 鐒跺悗APC媧懼彂鍣ㄥ瓙紼嬪簭KiDeliverApc鍦ㄨ繖涓嚎紼嬩笂涓嬫枃鎵ц鏉ュ紑濮嬪皢鏈喅鐨凙PC鎵ц銆傛敞鎰忥紝榪欎釜琛屼負涓柇浜嗙嚎紼嬬殑姝e父鎵ц嫻佺▼錛岄鍏堝皢鎺у埗鏉冪粰APC媧懼彂鍣紝闅忓悗褰揔iDeliverApc瀹屾垚鍚庯紝緇х畫綰跨▼鐨勬墽琛屻?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">渚嬪錛氬綋涓涓嚎紼嬭璋冨害榪愯鏃訛紝鏈鍚庝竴姝ワ紝涓婁笅鏂囧垏鎹㈠嚱鏁?SwapContext 鐢ㄦ潵媯鏌ユ槸鍚︽柊鐨勭嚎紼嬫湁鏈喅鐨勫唴鏍窤PCs.濡傛灉鏄紝SwapContext瑕佷箞錛?錛夎姹備竴涓狝PC綰у埆鐨勮蔣涓柇鏉ュ紑濮婣PC鎵ц錛岀敱浜庢柊綰跨▼榪愯鍦ㄤ綆鐨処RQL錛圥assive綰у埆銆?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">鎴栬咃紙2錛夎繑鍥濼RUE錛岃〃紺烘柊鐨勭嚎紼嬫湁鏈喅鐨勫唴鏍窤PCs銆?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">絀剁珶鏄墽琛?1)榪樻槸(2)鍙栧喅浜庢柊綰跨▼鎵澶勭殑IRQL綰у埆. 濡傛灉瀹冪殑鏉冮檺綰у埆楂樹簬Passive綰?SwapContext 鎵ц(1),濡傛灉瀹冩槸鍦≒assive綰?鍒欓夋嫨鎵ц(2).<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">SwapContext鐨勮繑鍥炲間粎浠呮槸鐗瑰畾緋葷粺鍑芥暟鍙敤鐨?榪欎簺緋葷粺鍑芥暟璋冪敤SwapContext鏉ュ己鍒跺垏鎹㈢嚎紼嬩笂涓嬫枃鍒板彟涓涓嚎紼? 鐒跺悗,褰撹繖浜涚郴緇熷嚱鏁扮粡榪囦竴孌墊椂闂村啀緇х畫鏃?浠栦滑閫氬父媯鏌wapContext 鐨勮繑鍥炲?濡傛灉鏄疶RUE,浠栦滑灝變細璋冪敤APC媧懼彂鍣ㄦ潵鎶曢掑唴鏍窤PCs鍒板綋鍓嶇殑綰跨▼. 渚嬪:<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">緋葷粺鍑芥暟KiSwapThread琚瓑寰呮湇鍔$敤鏉ユ斁寮冨鐞嗗櫒錛岀洿鍒扮瓑寰呯粨鏉熴傝繖涓嚱鏁板唴閮ㄨ皟鐢⊿wapContext銆傚綋絳夊緟緇撴潫錛岀戶緇粠璋冪敤SwapContext澶勬墽琛屾椂錛屽氨浼氭鏌wapContext鐨勮繑鍥炲箋傚鏋滄槸TRUE錛孠iSwapThread浼氶檷浣嶪RQL綰у埆鍒癆PC綰э紝鐒跺悗璋冪敤KiDeliverApc鏉ュ湪褰撳墠綰跨▼鎵ц鍐呮牳APCs.<br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">瀵逛簬鐢ㄦ埛APCs, 鍐呮牳璋冪敤APC媧懼彂鍣ㄤ粎浠呮槸褰撶嚎紼嬪洖鍒扮敤鎴鋒ā寮忥紝騫朵笖綰跨▼鐨勪富APC鐜鐨刄serApcPending鍩熶負TRUE鏃躲備緥濡傦細褰撶郴緇熸湇鍔℃淳鍙戝櫒KiSystemService瀹屾垚涓涓郴緇熸湇鍔¤姹傛鎵撶畻鍥炲埌鐢ㄦ埛妯″紡鏃訛紝瀹冧細媯鏌ユ槸鍚︽湁鏈喅鐨勭敤鎴稟PCs銆傚湪鎵ц涓婏紝KiDeliverApc璋冪敤鐢ㄦ埛APC鐨凨ernelRoutine. 闅忓悗錛孠iInitializeUserApc鍑芥暟琚皟鐢紝鐢ㄦ潵璁劇疆綰跨▼鐨勯櫡闃卞撫銆傛墍浠ヤ粠鍐呮牳妯″紡閫鍑烘椂錛岀嚎紼嬪紑濮嬪湪鐢ㄦ埛妯″紡涓嬫墽琛?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">銆侹iInitializeUserApc鐨勫嚱鏁扮殑浣滅敤鏄嫹璐濆綋鍓嶇嚎紼嬪厛鍓嶇殑鎵ц鐘舵侊紙褰撹繘鍏ュ唴鏍告ā寮忔椂錛岃繖涓姸鎬佷繚瀛樺湪綰跨▼鍐呮牳鏍堝垱寤虹殑闄烽槺甯ч噷錛夛紝浠庡唴鏍告爤鍒扮嚎紼嬬殑鐢ㄦ埛妯″紡鏍堬紝鍒濆鍖栫敤鎴鋒ā寮廇PC銆侫PC媧懼彂鍣ㄥ瓙紼嬪簭KiUserApcDispatcher鍦∟tdll.dll鍐呫傛渶鍚庯紝鍔犺澆闄烽槺甯х殑EIP瀵勫瓨鍣ㄥ拰Ntdll.dll涓璌iUserApcDispatcher鐨勫湴鍧銆傚綋闄烽槺甯ф渶鍚庨噴鏀炬椂錛屽唴鏍稿皢鎺у埗杞氦緇橩iUserApcDispatcher錛岃繖涓嚱鏁拌皟鐢ˋPC鐨凬ormalRoutine渚嬬▼錛孨ormalRoutine鍑芥暟鍦板潃浠ュ強鍙傛暟閮藉湪鏍堜腑錛屽綋渚嬬▼瀹屾垚鏃訛紝瀹冭皟鐢∟tContinue鏉ヨ綰跨▼鍒╃敤鍦ㄦ爤涓厛鍓嶇殑涓婁笅鏂囩戶緇墽琛岋紝浠夸經浠涔堜簨鎯呬篃娌℃湁鍙戠敓榪囥?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">褰撳唴鏍歌皟鐢↘iDeliverApc鏉ユ墽琛屼竴涓敤鎴鋒ā寮廇PC鏃訛紝綰跨▼涓殑PreviousMode鍩熻璁句負UserMode. TrapFrame鍩熸寚鍚戠嚎紼嬬殑闄烽槺甯с傚綋鍐呮牳璋冪敤KiDeliverApc鏉ユ墽琛屽唴鏍窤PCs鏃訛紝綰跨▼涓殑PreviousMode鍩熻璁句負KernelMode. TrapFrame鍩熸寚鍚慛ULL銆?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">娉ㄦ剰錛屾棤璁轟綍鏃跺彧瑕並ernelRoutine琚皟鐢紝浼犻掔粰瀹冪殑鎸囬拡鏄竴涓眬閮ㄧ殑APC灞炴х殑鍓湰錛岀敱浜嶢PC瀵硅薄宸茬粡鑴辯浜嗛槦鍒楋紝鎵浠ュ彲浠ュ畨鍏ㄧ殑鍦↘ernelRoutine涓噴鏀続PC鍐呭瓨銆傛澶栵紝榪欎釜渚嬬▼鍦ㄥ畠鐨勫弬鏁拌浼犻掔粰鍏朵粬渚嬬▼涔嬪墠錛屾湁涓涓渶鍚庣殑鏈轟細鏉ヤ慨鏀硅繖浜涘弬鏁般?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px"><br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">緇撹錛?br style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px">APC鎻愪緵浜嗕竴涓潪甯告湁鐢ㄧ殑鏈哄埗錛屽厑璁稿湪鐗瑰畾鐨勭嚎紼嬩笂涓嬫枃涓紓姝ョ殑鎵ц浠g爜銆備綔涓轟竴涓澶囬┍鍔ㄥ紑鍙戣咃紝浣犲彲浠ヤ緷璧朅PCs鍦ㄦ煇涓壒瀹氱殑綰跨▼涓婁笅鏂囦腑鎵ц涓涓緥紼嬶紝鑰屼笉闇瑕佺嚎紼嬬殑璁稿彲鍜屽共娑夈傚浜庣敤鎴峰簲鐢ㄧ▼搴忥紝鐢ㄦ埛妯″紡APCs鍙互鐢ㄦ潵鏈夋晥鍦板疄鐜頒竴浜涘洖璋冮氱煡鏈哄埗銆?/span></span><img src ="http://www.shnenglu.com/shaker/aggbug/145731.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/shaker/" target="_blank">shaker(澶瓙)</a> 2011-05-05 11:46 <a href="http://www.shnenglu.com/shaker/archive/2011/05/05/145731.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://www.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://fuwu56.com" target="_blank">国产乱子伦一区二区三区国色天香</a>| <a href="http://7n7l.com" target="_blank">日韩视频中文字幕</a>| <a href="http://yw9677.com" target="_blank">中文亚洲免费</a>| <a href="http://anal-movie-teen.com" target="_blank">欧美性色aⅴ视频一区日韩精品</a>| <a href="http://pourporn.com" target="_blank">中日韩男男gay无套</a>| <a href="http://6133c.com" target="_blank">99pao成人国产永久免费视频</a>| <a href="http://wwwbaoyu66.com" target="_blank">欧美日韩亚洲精品内裤</a>| <a href="http://xianconnector.com" target="_blank">亚洲性xxxx</a>| <a href="http://juegold.com" target="_blank">欧美一区二区成人6969</a>| <a href="http://www497171c.com" target="_blank">在线日韩一区二区</a>| <a href="http://aa56789.com" target="_blank">亚洲人成啪啪网站</a>| <a href="http://36seaa.com" target="_blank">国产精品v日韩精品v欧美精品网站</a>| <a href="http://884v.com" target="_blank">亚洲欧美在线播放</a>| <a href="http://ylnnc.com" target="_blank">久久天天狠狠</a>| <a href="http://phdy999.com" target="_blank">亚洲深夜影院</a>| <a href="http://2424ddd.com" target="_blank">久久久精品999</a>| <a href="http://94wr.com" target="_blank">99国产一区</a>| <a href="http://894322.com" target="_blank">欧美一级视频精品观看</a>| <a href="http://689657.com" target="_blank">亚洲精品系列</a>| <a href="http://www-yh6.com" target="_blank">欧美亚洲一级</a>| <a href="http://www-xj788.com" target="_blank">日韩一本二本av</a>| <a href="http://ewaygou.com" target="_blank">欧美一级片一区</a>| <a href="http://sxhrdyb.com" target="_blank">一本色道久久88综合亚洲精品ⅰ</a>| <a href="http://remenkan.com" target="_blank">香蕉乱码成人久久天堂爱免费</a>| <a href="http://scratbag.com" target="_blank">在线日韩av片</a>| <a href="http://6688zf.com" target="_blank">亚洲欧美日韩中文视频</a>| <a href="http://niu96.com" target="_blank">亚洲精品免费在线</a>| <a href="http://www-90422.com" target="_blank">亚欧美中日韩视频</a>| <a href="http://6faa.com" target="_blank">一个人看的www久久</a>| <a href="http://www4411n.com" target="_blank">久久精品国产v日韩v亚洲</a>| <a href="http://402626com.com" target="_blank">正在播放欧美一区</a>| <a href="http://coerverbeijing.com" target="_blank">久久久久国产精品厨房</a>| <a href="http://133969.com" target="_blank">亚洲一级片在线看</a>| <a href="http://xfrlyy.com" target="_blank">免费在线观看成人av</a>| <a href="http://www92y.com" target="_blank">久久国产精品久久精品国产</a>| <a href="http://zooxoft.com" target="_blank">欧美理论电影在线观看</a>| <a href="http://yyypdq.com" target="_blank">免费欧美高清视频</a>| <a href="http://by4433.com" target="_blank">国产日韩精品一区二区</a>| <a href="http://110673.com" target="_blank">日韩亚洲不卡在线</a>| <a href="http://sdgs6788.com" target="_blank">亚洲福利免费</a>| <a href="http://bjzgmember.com" target="_blank">欧美一二区视频</a>| <a href="http://119663.com" target="_blank">亚洲在线1234</a>| <a href="http://yjjs20.com" target="_blank">欧美日韩精品免费看</a>| <a href="http://www22336.com" target="_blank">欧美大秀在线观看</a>| <a href="http://wewe520.com" target="_blank">一区在线观看</a>| <a href="http://hjersqc.com" target="_blank">久久精品99</a>| <a href="http://66y3.com" target="_blank">久久精选视频</a>| <a href="http://3597777.com" target="_blank">国产免费观看久久黄</a>| <a href="http://0855dyw.com" target="_blank">中文高清一区</a>| <a href="http://seyuav4.com" target="_blank">亚洲一区二区三区色</a>| <a href="http://susan5.com" target="_blank">欧美精品一区二区三区高清aⅴ</a>| <a href="http://137177.com" target="_blank">免费成人性网站</a>| <a href="http://2424ddd.com" target="_blank">国语自产在线不卡</a>| <a href="http://dgxinshidai.com" target="_blank">欧美一区影院</a>| <a href="http://buyiker.com" target="_blank">久久精品国产在热久久</a>| <a href="http://beeperagain.com" target="_blank">国产欧美欧洲在线观看</a>| <a href="http://pnxingmei.com" target="_blank">亚洲欧美国产高清</a>| <a href="http://mide776.com" target="_blank">欧美一区二区三区日韩</a>| <a href="http://chinasck.com" target="_blank">国产精品日韩欧美大师</a>| <a href="http://457745.com" target="_blank">艳妇臀荡乳欲伦亚洲一区</a>| <a href="http://1x118.com" target="_blank">99视频在线精品国自产拍免费观看</a>| <a href="http://j88866.com" target="_blank">老司机亚洲精品</a>| <a href="http://8946286.com" target="_blank">欧美黄色小视频</a>| <a href="http://543199.com" target="_blank">亚洲欧洲精品一区二区三区波多野1战4</a>| <a href="http://yhc26.com" target="_blank">欧美在线不卡</a>| <a href="http://tzhbsb.com" target="_blank">久久综合网络一区二区</a>| <a href="http://5s5s5s.com" target="_blank">国内精品伊人久久久久av一坑</a>| <a href="http://www-72794.com" target="_blank">性欧美办公室18xxxxhd</a>| <a href="http://pgd857.com" target="_blank">久久深夜福利免费观看</a>| <a href="http://151545.com" target="_blank">曰韩精品一区二区</a>| <a href="http://lfxhfh.com" target="_blank">欧美xart系列在线观看</a>| <a href="http://www107aa.com" target="_blank">亚洲国产欧美一区二区三区同亚洲 </a>| <a href="http://160160160.com" target="_blank">亚洲无毛电影</a>| <a href="http://b46n.com" target="_blank">国产精品白丝av嫩草影院</a>| <a href="http://66636by.com" target="_blank">一区二区三区日韩欧美</a>| <a href="http://81ffff.com" target="_blank">亚洲一级特黄</a>| <a href="http://xxx6688.com" target="_blank">国产亚洲aⅴaaaaaa毛片</a>| <a href="http://ykk7.com" target="_blank">久久精品国产96久久久香蕉</a>| <a href="http://sz-jyqj.com" target="_blank">欧美91视频</a>| <a href="http://392294.com" target="_blank">99这里只有精品</a>| <a href="http://njggmy.com" target="_blank">国产精品国产三级欧美二区</a>| <a href="http://428820.com" target="_blank">亚洲欧美日韩在线</a>| <a href="http://889028.com" target="_blank">欧美成人激情视频</a>| <a href="http://580078.com" target="_blank">99精品热视频</a>| <a href="http://xiaokd666.com" target="_blank">国产伦精品一区二区</a>| <a href="http://739191g.com" target="_blank">欧美一区二区三区免费看</a>| <a href="http://baixinlocal.com" target="_blank">久色成人在线</a>| <a href="http://ayxchc.com" target="_blank">亚洲天堂久久</a>| <a href="http://74w4.com" target="_blank">国产午夜亚洲精品羞羞网站</a>| <a href="http://456888com.com" target="_blank">久久综合给合久久狠狠狠97色69</a>| <a href="http://cgnwp.com" target="_blank">亚洲国产精品国自产拍av秋霞</a>| <a href="http://11b29.com" target="_blank">亚洲天堂久久</a>| <a href="http://6666785.com" target="_blank">尤物99国产成人精品视频</a>| <a href="http://0370city.com" target="_blank">欧美人交a欧美精品</a>| <a href="http://8w82.com" target="_blank">午夜一区不卡</a>| <a href="http://gffffg.com" target="_blank">91久久线看在观草草青青</a>| <a href="http://dkmcjc.com" target="_blank">午夜欧美大尺度福利影院在线看 </a>| <a href="http://520taose.com" target="_blank">国产精品福利久久久</a>| <a href="http://r4747.com" target="_blank">久久国产一区</a>| <a href="http://huayoue.com" target="_blank">夜夜嗨av一区二区三区免费区</a>| <a href="http://jlkcjz.com" target="_blank">久久国产主播</a>| <a href="http://4884888.com" target="_blank">一本大道久久精品懂色aⅴ</a>| <a href="http://njhuike.com" target="_blank">国产欧美一区二区三区视频</a>| <a href="http://9511331.com" target="_blank">欧美成人午夜影院</a>| <a href="http://66666556.com" target="_blank">性欧美大战久久久久久久免费观看</a>| <a href="http://mauhorng.com" target="_blank">欧美电影免费观看高清完整版</a>| <a href="http://h7yy.com" target="_blank">午夜国产精品影院在线观看</a>| <a href="http://674446.com" target="_blank">亚洲国产精品久久久久婷婷884</a>| <a href="http://313cq.com" target="_blank">亚洲大黄网站</a>| <a href="http://ssss96.com" target="_blank">久久久久欧美精品</a>| <a href="http://lovehefei.com" target="_blank">亚洲一品av免费观看</a>| <a href="http://bjzgmember.com" target="_blank">在线观看欧美日本</a>| <a href="http://fangxinedu.com" target="_blank">国产麻豆9l精品三级站</a>| <a href="http://9881600.com" target="_blank">欧美精品一区二区高清在线观看</a>| <a href="http://096577.com" target="_blank">欧美在线91</a>| <a href="http://www49797.com" target="_blank">亚洲视频免费在线</a>| <a href="http://3848404.com" target="_blank">亚洲精品一级</a>| <a href="http://99hhbb.com" target="_blank">欧美激情综合色</a>| <a href="http://613by.com" target="_blank">久久综合九色综合网站</a>| <a href="http://49vvvv.com" target="_blank">亚洲专区在线</a>| <a href="http://www77577.com" target="_blank">一区二区三区不卡视频在线观看</a>| <a href="http://xiyan88.com" target="_blank">在线观看欧美日本</a>| <a href="http://my7877.com" target="_blank">黄色欧美日韩</a>| <a href="http://874805.com" target="_blank">国内揄拍国内精品少妇国语</a>| <a href="http://1177898.com" target="_blank">国产精品乱码人人做人人爱</a>| <a href="http://ju255.com" target="_blank">欧美区日韩区</a>| <a href="http://xissy.com" target="_blank">欧美日本久久</a>| <a href="http://127mingdao.com" target="_blank">欧美另类综合</a>| <a href="http://www-452.com" target="_blank">欧美激情四色</a>| <a href="http://mytopvogue.com" target="_blank">欧美电影在线观看完整版</a>| <a href="http://timonna.com" target="_blank">久久久噜噜噜久久人人看</a>| <a href="http://6133c.com" target="_blank">欧美在线亚洲一区</a>| <a href="http://621791.com" target="_blank">午夜精品视频在线</a>| <a href="http://playav999.com" target="_blank">亚洲在线免费视频</a>| <a href="http://4915w.com" target="_blank">一区二区三区日韩在线观看 </a>| <a href="http://4448884.com" target="_blank">久久蜜臀精品av</a>| <a href="http://mm77gg.com" target="_blank">久久国产手机看片</a>| <a href="http://dy123456.com" target="_blank">久久久久五月天</a>| <a href="http://www-733999.com" target="_blank">欧美在线观看视频在线</a>| <a href="http://er65.com" target="_blank">欧美一区午夜精品</a>| <a href="http://1616mz.com" target="_blank">欧美高清视频一区二区三区在线观看</a>| <a href="http://bandycup.com" target="_blank">久久久久久久999</a>| <a href="http://wogoyao.com" target="_blank">久久久久女教师免费一区</a>| <a href="http://kittybob.com" target="_blank">久久久久国产精品午夜一区</a>| <a href="http://www18998.com" target="_blank">久久精品道一区二区三区</a>| <a href="http://338pv.com" target="_blank">欧美中在线观看</a>| <a href="http://cnchtx.com" target="_blank">久久久久久久成人</a>| <a href="http://esdzu.com" target="_blank">麻豆精品在线观看</a>| <a href="http://jizz16.com" target="_blank">欧美精品久久久久久久免费观看</a>| <a href="http://gztgo.com" target="_blank">欧美高清视频一二三区</a>| <a href="http://szywsj.com" target="_blank">欧美日韩美女</a>| <a href="http://jiarenlady.com" target="_blank">国产精品高清一区二区三区</a>| <a href="http://wslsp.com" target="_blank">国产精品视频一二</a>| <a href="http://yy6024.com" target="_blank">国内久久精品视频</a>| <a href="http://444yd.com" target="_blank">亚洲国产一区视频</a>| <a href="http://y66776.com" target="_blank">夜夜嗨av一区二区三区免费区</a>| <a href="http://www49718.com" target="_blank">亚洲视频在线观看免费</a>| <a href="http://ssss96.com" target="_blank">午夜精品影院在线观看</a>| <a href="http://017455.com" target="_blank">久久久国产精品一区二区三区</a>| <a href="http://goldure.com" target="_blank">久久婷婷亚洲</a>| <a href="http://sishengnv.com" target="_blank">亚洲激情中文1区</a>| <a href="http://qqkanp.com" target="_blank">亚洲视频第一页</a>| <a href="http://ooonefteprompellets.com" target="_blank">小黄鸭精品密入口导航</a>| <a href="http://8eeeccc.com" target="_blank">久久婷婷丁香</a>| <a href="http://musicshq.com" target="_blank">欧美日韩无遮挡</a>| <a href="http://5252bnet.com" target="_blank">国产三级精品在线不卡</a>| <a href="http://318823.com" target="_blank">亚洲国产成人精品视频</a>| <a href="http://gzpurefaith.com" target="_blank">99精品国产一区二区青青牛奶</a>| <a href="http://laoyewo.com" target="_blank">亚洲一区影音先锋</a>| <a href="http://yhc26.com" target="_blank">蜜桃伊人久久</a>| <a href="http://www979vv.com" target="_blank">日韩一级精品视频在线观看</a>| <a href="http://www-888005.com" target="_blank">亚洲一二三区在线</a>| <a href="http://ythbhg.com" target="_blank">麻豆成人在线观看</a>| <a href="http://wwwgay456.com" target="_blank">国产精品美女999</a>| <a href="http://shno1steel.com" target="_blank">136国产福利精品导航网址应用</a>| <a href="http://js6996.com" target="_blank">亚洲精品社区</a>| <a href="http://119552.com" target="_blank">欧美制服丝袜</a>| <a href="http://erzhuzi.com" target="_blank">亚洲区在线播放</a>| <a href="http://hh474.com" target="_blank">欧美在线观看视频在线</a>| <a href="http://788111c.com" target="_blank">欧美国产综合</a>| <a href="http://340996.com" target="_blank">国产日韩欧美中文在线播放</a>| <a href="http://1397979.com" target="_blank">亚洲人成网站999久久久综合</a>| <a href="http://tt5125.com" target="_blank">亚洲视频免费</a>| <a href="http://bixiuge.com" target="_blank">欧美99在线视频观看</a>| <a href="http://03qt.com" target="_blank">亚洲视频欧美视频</a>| <a href="http://gzhachi.com" target="_blank">欧美成人高清视频</a>| <a href="http://xiaobi13.com" target="_blank">国产亚洲精品v</a>| <a href="http://85995m.com" target="_blank">99re视频这里只有精品</a>| <a href="http://xb989.com" target="_blank">久久天天躁狠狠躁夜夜爽蜜月</a>| <a href="http://h15h15.com" target="_blank">99爱精品视频</a>| <a href="http://136066.com" target="_blank">美女视频黄a大片欧美</a>| <a href="http://13751144594.com" target="_blank">亚洲精品国产精品乱码不99</a>| <a href="http://39ddtv.com" target="_blank">性视频1819p久久</a>| <a href="http://aijiashe.com" target="_blank">欧美日韩精品免费看 </a>| <a href="http://sdtricoop.com" target="_blank">欧美日韩国产天堂</a>| <a href="http://ccc159.com" target="_blank">亚洲国产成人精品久久</a>| <a href="http://18av-2.com" target="_blank">久久精品在线免费观看</a>| <a href="http://yyypdq.com" target="_blank">亚洲午夜av电影</a>| <a href="http://099idc.com" target="_blank">欧美日韩国产成人精品</a>| <a href="http://555346.com" target="_blank">亚洲国产cao</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>