AVCSTRM_CLOSE
Kode fungsi AVCSTRM_CLOSE menutup aliran yang ditentukan dan membebaskan sumber daya apa pun yang dialokasikan dalam AVCSTRM_OPEN.
Blok Status I/O
Jika berhasil, avcstrm.sys mengatur Irp-IoStatus.Status> ke STATUS_SUCCESS.
Kemungkinan nilai pengembalian kesalahan meliputi:
Status Kesalahan | Deskripsi |
---|---|
STATUS_DEVICE_REMOVED | Perangkat yang sesuai dengan operasi AVCSTRM_READ tidak ada lagi. |
STATUS_CANCELLED | Permintaan tidak dapat diselesaikan. |
STATUS_INVALID_PARAMETER | Parameter yang ditentukan dalam IRP salah, |
STATUS_INSUFFICIENT_RESOURCES | Tidak ada sumber daya sistem yang memadai untuk menyelesaikan permintaan. |
STATUS_PENDING | Permintaan telah diterima tetapi memerlukan pemrosesan lebih lanjut. Rutinitas penyelesaian I/O akan menangani respons akhir. |
AVC_STREAM_REQUEST_BLOCK Input
SizeOfThisBlock, Versi dan Fungsi
Gunakan makro INIT_AVCSTRM_HEADER untuk menginisialisasi anggota ini. Teruskan AVCSTRM_CLOSE dalam argumen Permintaan makro.
AVCStreamContext
Menentukan konteks aliran (handel) aliran yang akan ditutup. Jika AVCSTRM_CLOSE berhasil dikembalikan, nilai ini tidak lagi valid.
Berikut ini adalah contoh cara menentukan aliran yang akan ditutup:
pAVCStrmReq = &pStrmExt->AVCStrmReq;
RtlZeroMemory(pAVCStrmReq, sizeof(AVC_STREAM_REQUEST_BLOCK));
INIT_AVCSTRM_HEADER(pAVCStrmReq, AVCSTRM_CLOSE);
pAVCStrmReq->AVCStreamContext = pStrmExt->AVCStreamContext;
Status =
AVCStrmReqSubmitIrpSynch (
pDevExt->pBusDeviceObject,
pStrmExt->pIrpReq,
pAVCStrmReq
);
Driver subunit harus terlebih dahulu mengalokasikan IRP dan struktur AVC_STREAM_REQUEST_BLOCK .
Selanjutnya, ini harus menggunakan makro INIT_AVCSTRM_HEADER untuk menginisialisasi struktur AVC_STREAM_REQUEST_BLOCK, meneruskan AVCSTRM_CLOSE sebagai argumen Permintaan ke makro.
Selanjutnya, driver subunit mengatur anggota AVCStreamContext ke aliran untuk ditutup.
Untuk mengirim permintaan ini, subunit mengirimkan IRP IRP_MJ_INTERNAL_DEVICE_CONTROL dengan anggota IoControlCode dari IRP yang diatur ke IOCTL_AVCSTRM_CLASS dan anggota Argumen1 dari IRP diatur ke struktur AVC_STREAM_REQUEST_BLOCK yang menjelaskan operasi dekat yang akan dilakukan.
Driver subunit dapat mengharapkan perintah ini selesai secara sinkron. Hasilnya segera kembali tanpa operasi tertunda di avcstrm.sys.
Kode fungsi ini harus dipanggil di IRQL = PASSIVE_LEVEL.
Komentar
Fungsi ini menggunakan anggota AVCStreamContext dari union CommandData dalam struktur AVC_STREAM_REQUEST_BLOCK seperti yang ditunjukkan di bawah ini.
typedef struct _AVC_STREAM_REQUEST_BLOCK {
ULONG SizeOfThisBlock;
ULONG Version;
AVCSTRM_FUNCTION Function;
.
.
PVOID AVCStreamContext;
.
.
} AVC_STREAM_REQUEST_BLOCK, *PAVC_STREAM_REQUEST_BLOCK;
Persyaratan
Header: Dinyatakan dalam avcstrm.h. Sertakan avcstrm.h.
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk