Fungsi QueryActCtxW (winbase.h)
Fungsi QueryActCtxW meminta konteks aktivasi.
Sintaks
BOOL QueryActCtxW(
[in] DWORD dwFlags,
[in] HANDLE hActCtx,
[in, optional] PVOID pvSubInstance,
[in] ULONG ulInfoClass,
[out] PVOID pvBuffer,
[in, optional] SIZE_T cbBuffer,
[out, optional] SIZE_T *pcbWrittenOrRequired
);
Parameter
[in] dwFlags
Parameter ini harus diatur ke salah satu bit bendera berikut.
Bendera | Makna |
---|---|
|
QueryActCtxW mengkueri konteks aktivasi yang aktif pada utas alih-alih konteks yang ditentukan oleh hActCtx. Ini biasanya konteks aktivasi terakhir yang diteruskan ke ActivateActCtx. Jika ActivateActCtx belum dipanggil, konteks aktivasi aktif dapat menjadi konteks aktivasi yang digunakan oleh yang dapat dieksekusi dari proses saat ini. Dalam kasus lain, sistem operasi menentukan konteks aktivasi aktif. Misalnya, ketika fungsi panggilan balik ke utas baru dipanggil, konteks aktivasi aktif mungkin merupakan konteks yang aktif saat Anda membuat utas dengan memanggil CreateThread. |
|
QueryActCtxW menginterpretasikan hActCtx sebagai jenis data HMODULE dan mengkueri konteks aktivasi yang terkait dengan DLL atau EXE.
Saat DLL atau EXE dimuat, loader memeriksa manifes yang disimpan dalam sumber daya. Jika loader menemukan sumber daya RT_MANIFEST dengan pengidentifikasi sumber daya yang diatur ke ISOLATIONAWARE_MANIFEST_ RESOURCE_ID, loader mengaitkan konteks aktivasi yang dihasilkan dengan DLL atau EXE. Ini adalah konteks aktivasi yang dikueri QueryActCtxW saat bendera QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE telah ditetapkan. |
|
QueryActCtxW menafsirkan hActCtx sebagai alamat dalam DLL atau EXE dan mengkueri konteks aktivasi yang telah dikaitkan dengan DLL atau EXE. Ini bisa menjadi alamat apa pun dalam DLL atau EXE. Misalnya, alamat fungsi apa pun dalam DLL atau EXE atau alamat data statis apa pun, seperti string konstanta.
Saat DLL atau EXE dimuat, loader memeriksa manifes yang disimpan dalam sumber daya dengan cara yang sama seperti QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE. |
[in] hActCtx
Tangani konteks aktivasi yang sedang dikueri.
[in, optional] pvSubInstance
Indeks perakitan, atau kombinasi perakitan dan file, dalam konteks aktivasi. Arti pvSubInstance tergantung pada opsi yang ditentukan oleh nilai parameter ulInfoClass .
Parameter ini mungkin null.
Opsi ulInfoClass | Makna |
---|---|
|
Penunjuk ke DWORD yang menentukan indeks perakitan dalam konteks aktivasi. Ini adalah konteks aktivasi yang dikueri QueryActCtxW . |
|
Arahkan ke struktur ACTIVATION_CONTEXT_QUERY_INDEX . Jika QueryActCtxW dipanggil dengan opsi ini dan fungsi berhasil, buffer yang dikembalikan berisi informasi untuk file di rakitan. Informasi ini dalam bentuk struktur ASSEMBLY_FILE_DETAILED_INFORMATION . |
[in] ulInfoClass
Parameter ini hanya dapat memiliki nilai yang diperlihatkan dalam tabel berikut.
Opsi | Makna |
---|---|
|
Tidak tersedia. |
|
Jika QueryActCtxW dipanggil dengan opsi ini dan fungsi berhasil, buffer yang dikembalikan berisi informasi terperinci tentang konteks aktivasi. Informasi ini dalam bentuk struktur ACTIVATION_CONTEXT_DETAILED_INFORMATION . |
|
Jika QueryActCtxW dipanggil dengan opsi ini dan fungsi berhasil, buffer berisi informasi tentang rakitan yang memiliki indeks yang ditentukan dalam pvSubInstance. Informasi ini dalam bentuk struktur ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION . |
|
Informasi tentang file di salah satu rakitan dalam Konteks Aktivasi. Parameter pvSubInstance harus menunjuk ke struktur ACTIVATION_CONTEXT_QUERY_INDEX . Jika QueryActCtxW dipanggil dengan opsi ini dan fungsi berhasil, buffer yang dikembalikan berisi informasi untuk file di rakitan. Informasi ini dalam bentuk struktur ASSEMBLY_FILE_DETAILED_INFORMATION . |
|
Jika QueryActCtxW dipanggil dengan opsi ini dan fungsi berhasil, buffer berisi informasi tentang tingkat eksekusi konteks aktivasi yang diminta. Informasi ini dalam bentuk struktur ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION .
Windows Server 2003 dan Windows XP: Nilai ini tidak tersedia. |
|
Jika QueryActCtxW dipanggil dengan opsi ini dan fungsi berhasil, buffer berisi informasi tentang konteks kompatibilitas yang diminta. Informasi ini dalam bentuk struktur ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION .
Windows Server 2008 dan yang lebih lama, serta Windows Vista dan yang lebih lama: Nilai ini tidak tersedia. Opsi ini tersedia dimulai dengan Windows Server 2008 R2 dan Windows 7. |
[out] pvBuffer
Penunjuk ke buffer yang menyimpan informasi yang dikembalikan. Parameter ini bersifat opsional. Jika pvBuffernull, maka cbBuffer harus nol. Jika ukuran buffer yang diarahkan oleh pvBuffer terlalu kecil, QueryActCtxW mengembalikan ERROR_INSUFFICIENT_BUFFER dan tidak ada data yang ditulis ke dalam buffer. Lihat bagian Keterangan untuk metode yang dapat Anda gunakan untuk menentukan ukuran buffer yang diperlukan.
[in, optional] cbBuffer
Ukuran buffer dalam byte yang diacu oleh pvBuffer. Parameter ini bersifat opsional.
[out, optional] pcbWrittenOrRequired
Jumlah byte yang ditulis atau diperlukan. Parameter pcbWrittenOrRequired hanya dapat null ketika pvBuffer adalah NULL. Jika pcbWrittenOrRequired bukan NULL, itu diisi dengan jumlah byte yang diperlukan untuk menyimpan buffer yang dikembalikan.
Mengembalikan nilai
Jika fungsi berhasil, fungsi akan mengembalikan TRUE. Jika tidak, ia mengembalikan FALSE.
Fungsi ini menetapkan kesalahan yang dapat diambil dengan memanggil GetLastError. Misalnya, lihat Mengambil Kode Last-Error. Untuk daftar lengkap kode kesalahan, lihat Kode Kesalahan Sistem.
Keterangan
Parameter cbBuffer menentukan ukuran dalam byte buffer yang diacu oleh pvBuffer. Jika pvBuffer adalah NULL, maka cbBuffer harus 0. Parameter pcbWrittenOrRequired hanya dapat berupa NULL jika pvBuffer adalah NULL. Jika pcbWrittenOrRequirednon-NULL saat dikembalikan, itu diisi dengan jumlah byte yang diperlukan untuk menyimpan informasi yang dikembalikan. Ketika data informasi yang dikembalikan lebih besar dari buffer yang disediakan, QueryActCtxW mengembalikan ERROR_INSUFFICIENT_BUFFER dan tidak ada data yang ditulis ke buffer yang diarahkan oleh pvBuffer.
Contoh berikut menunjukkan metode pemanggilan terlebih dahulu dengan buffer kecil dan kemudian menarik kembali jika buffer terlalu kecil.
SIZE_T cbRequired;
PVOID pvData = NULL;
SIZE_T cbAvailable = 0;
if (!QueryActCtxW(..., pvData, cbAvailable, &cbRequired) && (GetLastError()== ERROR_INSUFFICIENT_BUFFER))
{
// Allocate enough space to store the returned buffer, fail if too small
if (NULL == (pvData = HeapAlloc(GetProcessHeap(), 0, cbRequired)))
{
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
cbAvailable = cbRequired;
// Try again, this should succeed.
if (QueryActCtxW(..., pvData, cbAvailable, &cbRequired))
{
// Use the returned data in pvData
}
HeapFree(GetProcessHeap(), 0, pvData);
pvData = NULL;
}
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows XP [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2003 [hanya aplikasi desktop] |
Target Platform | Windows |
Header | winbase.h (termasuk Windows.h) |
Pustaka | Kernel32.lib |
DLL | Kernel32.dll |