Fungsi RtlVirtualUnwind (winnt.h)

Mengambil konteks pemanggilan fungsi yang mendahului konteks fungsi yang ditentukan.

Catatan

 Fungsi ini tidak diimplementasikan pada semua platform prosesor dan implementasinya berbeda pada setiap platform yang mendukungnya. Prototipe berikut mencantumkan semua parameter potensial dan aplikasinya. Baca lebih lanjut untuk prototipe fungsi khusus prosesor.

Sintaks

NTSYSAPI PEXCEPTION_ROUTINE RtlVirtualUnwind(
  [in]                DWORD                          HandlerType,
  [in]                DWORD64                        ImageBase,
  [in]                DWORD64                        ControlPc,
  [in]                PRUNTIME_FUNCTION              FunctionEntry,
  [in, out]           PCONTEXT                       ContextRecord,
  [out]               PVOID                          *HandlerData,
  [out]               PDWORD64                       EstablisherFrame,
  [in, out, optional] PKNONVOLATILE_CONTEXT_POINTERS ContextPointers
);

Parameter

[in] HandlerType

Jenis handler. Parameter ini bisa menjadi salah satu nilai berikut.

Parameter ini hanya ada pada x64.

Nilai Makna
UNW_FLAG_NHANDLER
0x0
Fungsi ini tidak memiliki handler.
UNW_FLAG_EHANDLER
0x1
Fungsi ini memiliki handler pengecualian yang harus dipanggil.
UNW_FLAG_UHANDLER
0x2
Fungsi ini memiliki handler penghentian yang harus dipanggil saat melepaskan pengecualian.
UNW_FLAG_CHAININFO
0x4
Anggota FunctionEntry adalah konten entri tabel fungsi sebelumnya.

[in] ImageBase

Alamat dasar modul tempat fungsi berada.

[in] ControlPc

Alamat virtual tempat kontrol meninggalkan fungsi yang ditentukan.

[in] FunctionEntry

Alamat entri tabel fungsi untuk fungsi yang ditentukan. Untuk mendapatkan entri tabel fungsi, panggil fungsi RtlLookupFunctionEntry .

[in, out] ContextRecord

Penunjuk ke struktur CONTEXT yang mewakili konteks bingkai sebelumnya.

[out] HandlerData

Lokasi PC. Jika parameter ini adalah 0, PC berada di prolog, epilog, atau wilayah bingkai null fungsi. Jika parameter ini adalah 1, PC berada di isi fungsi.

Parameter ini tidak ada pada x64.

[out] EstablisherFrame

Penunjuk ke struktur FRAME_POINTERS yang menerima nilai penunjuk bingkai pembentuk. Penunjuk bingkai nyata didefinisikan hanya jika InFunction adalah 1.

Parameter ini berjenis PULONG64 pada x64.

[in, out, optional] ContextPointers

Penunjuk opsional ke struktur penunjuk konteks.

Nilai kembali

Fungsi ini mengembalikan penunjuk ke fungsi panggilan balik EXCEPTION_ROUTINE .

Keterangan

Daftar lengkap penanda epilog untuk x64 adalah sebagai berikut:

  • Ret
  • ret n
  • rep ret
  • jmp imm8 | imm32 di mana target berada di luar fungsi yang tidak digunakan
  • jmp qword ptr imm32
  • rex.w jmp reg

Persyaratan

   
Target Platform Windows
Header winnt.h (sertakan Windows.h)
Pustaka Kernel32.lib
DLL Kernel32.dll

Lihat juga

KONTEKS

EXCEPTION_RECORD

RtlLookupFunctionEntry

API Vertdll tersedia di enklave VBS