IOCTL_CDROM_EXCLUSIVE_ACCESS IOCTL (ntddcdrm.h)

Permintaan IOCTL_CDROM_EXCLUSIVE_ACCESS menginstruksikan driver kelas CD-ROM untuk:

  • Laporkan status akses perangkat CD-ROM.
  • Kunci perangkat CD-ROM untuk akses eksklusif.
  • Buka kunci perangkat CD-ROM untuk akses eksklusif.
Handel FileObject yang valid harus ada agar IOCTL ini berhasil. Handel FileObject melindungi sistem dari penghentian aplikasi yang tidak terduga atau akuisisi kunci akses eksklusif secara tidak disengaja tanpa melepaskan kunci akses eksklusif berikutnya. Handel FileObject yang valid diperlukan karena ketika aplikasi ditutup, driver kelas CD-ROM akan menerima CLEANUP dan CLOSE I/O Request Packets (IRP), yang dapat digunakan untuk secara otomatis melepaskan kunci akses eksklusif yang diperoleh oleh handel tersebut. Metode sederhana ini melindungi dari sebagian besar rilis akses eksklusif yang tidak disengaja. Metode apa pun yang digunakan untuk menghindari fungsi ini dapat mengurangi keamanan dan efektivitas metode penguncian akses eksklusif.

Kode utama

IRP_MJ_DEVICE_CONTROL

Buffer input

Bergantung pada operasi yang diminta pemanggil, pemanggil harus menyediakan salah satu struktur berikut sebagai input di Irp-AssociatedIrp.SystemBuffer>:

Panjang buffer input

Anggota Parameters.DeviceIoControl.InputBufferLength dalam struktur IO_STACK_LOCATION menunjukkan ukuran, dalam byte, dari buffer input yang dialokasikan pengguna.

Buffer output

Jika pemanggil meminta status akses eksklusif perangkat CD-ROM (RequestType = ExclusiveAccessQueryState), driver kelas CD-ROM mengembalikan struktur jenis CDROM_EXCLUSIVE_LOCK_STATE dalam buffer di Irp-AssociatedIrp.SystemBuffer>yang anggota LockState-nya menunjukkan status akses perangkat.

Panjang buffer output

Anggota Parameters.DeviceIoControl.OutputBufferLength di lokasi tumpukan I/O (IO_STACK_LOCATION) menunjukkan ukuran, dalam byte, dari buffer output.

Blok status

Bidang Informasi diatur ke jumlah byte yang dikembalikan. Bidang Status diatur ke STATUS_SUCCESS jika permintaan berhasil.

Jika permintaan gagal, bidang Status mungkin diatur ke salah satu pesan kesalahan berikut:

STATUS_ACCESS_DENIED (kode kesalahan Windows: ERROR_ACCESS_DENIED)

Perangkat sudah dikunci untuk akses eksklusif.

STATUS_BUFFER_TOO_SMALL (kode kesalahan Windows: ERROR_INSUFFICIENT_BUFFER)

Buffer output terlalu kecil untuk permintaan ExclusiveAccessQueryState .

STATUS_INFO_LENGTH_MISMATCH (kode kesalahan Windows: ERROR_BAD_LENGTH)

Buffer input terlalu kecil.

STATUS_INVALID_DEVICE_REQUEST (kode kesalahan Windows: ERROR_INVALID_FUNCTION)

Driver kelas CD-ROM mengembalikan kode status ini ketika salah satu dari dua kesalahan berikut terjadi:

  • Penelepon membuat permintaan pada tingkat IRQL selain PASSIVE_LEVEL.
  • Pemanggil mengirim permintaan dengan RequestType = ExclusiveAccessUnlockDevice untuk membuka kunci perangkat yang tidak dalam mode eksklusif.

STATUS_INVALID_DEVICE_STATE (kode kesalahan Windows: ERROR_BAD_COMMAND)

Pemanggil mencoba mengunci perangkat ketika driver sistem file dipasang pada perangkat ini, tanpa menentukan bahwa driver kelas harus menangguhkan pemeriksaan untuk driver sistem file yang dipasang. Untuk menangguhkan pemeriksaan driver sistem file yang dipasang, pemanggil harus mengatur anggota BenderaCDROM_EXCLUSIVE_ACCESS ke 1.

STATUS_INVALID_HANDLE (kode kesalahan Windows: ERROR_INVALID_HANDLE)

Driver kelas CD-ROM mengembalikan kode status ini ketika salah satu dari dua kesalahan berikut terjadi:

  • Objek file yang diperlukan untuk melacak permintaan tidak tersedia. Driver kelas CD-ROM tidak menerima permintaan untuk membuat objek file dari pemanggil ini.
  • Pemanggil mengirim permintaan dengan RequestType = ExclusiveAccessUnlockDevice untuk membuka kunci perangkat, meskipun pemanggil tidak memiliki akses eksklusif ke perangkat.

STATUS_INVALID_PARAMETER (kode kesalahan Windows: ERROR_INVALID_PARAMETER)

Driver kelas CD-ROM mengembalikan kode status ini ketika salah satu dari dua kesalahan berikut terjadi:

  • RequestType yang ditentukan bukan anggota EXCLUSIVE_ACCESS_REQUEST_TYPE yang valid.
  • String nama pemanggil di anggota CallerNameCDROM_EXCLUSIVE_LOCK melanggar konvensi penamaan. CallerName harus berupa string yang dihentikan NULL yang berisi karakter berikut: alfanumerik (A - Z, a - z, 0 - 9), spasi, titik, koma, titik dua (:), titik koma (;), tanda hubung (-), dan garis bawah (_). Panjang string harus kurang dari CDROM_EXCLUSIVE_CALLER_LENGTH byte, termasuk NULL di akhir string.

Persyaratan

Persyaratan Nilai
Header ntddcdrm.h (termasuk Ntddcdrm.h)

Lihat juga

CDROM_EXCLUSIVE_ACCESS

CDROM_EXCLUSIVE_LOCK

CDROM_EXCLUSIVE_LOCK_STATE

EXCLUSIVE_ACCESS_REQUEST_TYPE

IO_STACK_LOCATION