Transfer Data Antara Aplikasi Warisan dan Driver Windows Vista

Lapisan kompatibilitas harus memastikan bahwa filter pemrosesan gambar driver selalu dipanggil, dan bahwa aplikasi warisan yang tidak secara eksplisit mendukung akun LocalService masih akan dapat melakukan transfer data. Akun LocalService tersedia di Microsoft Windows XP dan sistem operasi yang lebih baru.

Minimal, pengemudi warisan harus mengekspos TYMED_FILE dan TYMED_CALLBACK; namun, driver Windows Vista tidak akan pernah mengekspos TYMED_CALLBACK (atau TYMED_MULTIPAGE_CALLBACK). Bagian transfer lapisan kompatibilitas akan memastikan bahwa aplikasi warisan akan melihat TYMED_CALLBACK meskipun driver Windows Vista tidak menerapkannya. TYMED_MULTIPAGE_CALLBACK tidak akan pernah terekspos dari pengandar Windows Vista.

Aplikasi warisan akan melihat format yang didukung untuk TYMED_FILE dan TYMED_MULTIPAGE_FILE yang diekspos driver Windows Vista. Untuk TYMED_CALLBACK, aplikasi warisan akan melihat format yang sama dengan driver yang diekspos untuk TYMED_FILE, dengan satu pengecualian: alih-alih mengekspos WiaImgFmt_BMP, lapisan kompatibilitas akan mengekspos WiaImgFmt_MEMORYBMP ke aplikasi warisan. Cara ini dilakukan adalah dengan memiliki panggilan "intersepsi" lapisan kompatibilitas ke IWiaMiniDrv::d rvGetWiaFormatInfo, dan menambahkan semua format TYMED_FILE driver Windows Vista (dengan pengecualian WiaImgFmt_BMP /WiaImgFmt_MEMORYBMP) untuk TYMED_CALLBACK. Yang paling penting lapisan kompatibilitas membuat objek panggilan balik warisannya sendiri selama transfer data, yang mengonversi pesan transfer Windows Vista dan data yang ditulis ke dalam alirannya menjadi pesan transfer warisan.

Untuk informasi selengkapnya tentang konstanta TYMED, silakan lihat Memahami TYMED.

Lapisan kompatibilitas membuat dua objek panggilan balik di proksi WIA COM: satu untuk transfer panggilan balik dan satu untuk transfer file. Proksi WIA COM mengimplementasikan antarmuka IWiaTransferCallback. Objek panggilan balik ini mengurus konversi antara transfer berbasis aliran dan transfer "gaya lama". Lapisan kompatibilitas WIA juga memulai filter pemrosesan gambar driver tempat kita meneruskan objek panggilan balik lapisan kompatibilitas. Dengan demikian, filter pemrosesan gambar akan selalu berjalan dalam konteks aplikasi sama seperti transfer Windows Vista.

Diagram berikut menggambarkan bagaimana lapisan kompatibilitas akan bekerja dengan driver Windows Vista dan aplikasi warisan.

diagram yang mengilustrasikan transfer data antara aplikasi warisan dan driver vista windows.

Objek panggilan balik warisan dalam proksi WIA COM mengonversi pesan transfer Windows Vista dan data yang ditulis menjadi aliran menjadi pesan transfer warisan, dan menulis data ke file atau panggilan balik data bersalur.

Ketika driver memanggil salah satu metode yang diekspos oleh antarmuka IStream yang diterimanya dari metode IWiaMiniDrvTransferCallback::GetNextStream (perhatikan driver hanya boleh memanggil IStream::Write, IStream::Seek, dan IStream::SetSize). Dengan demikian, lapisan kompatibilitas menciptakan implementasi IStream kustom yang hanya membungkus antarmuka IStream yang disediakan proksi WIA COM.

Transfer file warisan sangat mudah. Contoh transfer tersebut adalah ketika aplikasi warisan memanggil IWiaDataTransfer::idtGetData. Lapisan kompatibilitas membuat aliran data pada file yang ditentukan aplikasi dalam struktur STGMEDIUM. Aliran ini diteruskan ke filter pemrosesan driver atau gambar saat memanggil IWiaTransferCallback::GetNextStream dan semua pesan transfer mudah dipetakan ke pesan transfer warisan. Untuk deskripsi yang lebih rinci tentang bagaimana pesan dipetakan, lihat Implementasi Transfer Data Lapisan Kompatibilitas WIA.

Saat memanggil metode IWiaDataTransfer::d tGetData, lapisan kompatibilitas melakukan beberapa pemeriksaan parameter yang lebih ketat. Misalnya, lapisan kompatibilitas tidak memungkinkan panggilan metode IWiaDataTrasnfer::idtGetData dengan TYMED_FILE dan jumlah halaman yang lebih tinggi maka satu Dalam transfer data yang tidak menggunakan lapisan kompatibilitas dimungkinkan untuk memanggil metode IWiaDataTrasnfer::idtGetData dengan TYMED_FILE dan memiliki jumlah halaman yang lebih besar dari satu.

Transfer panggilan balik warisan sedikit lebih sulit. Karena driver Windows Vista tidak mendukung WiaImgFmt_MEMORYBMP, yang diperlukan untuk driver warisan, objek panggilan balik lapisan kompatibilitas harus menangani konversi dari WiaImgFmt_BMP ke WiaImgFmt_MEMORYBMP. Pemetaan antara pesan transfer juga tidak cukup mudah. Lapisan kompatibilitas menciptakan implementasi alirannya sendiri. Lapisan kompatibilitas mengirim IT_MSG_DATA pesan ke panggilan balik aplikasi setelah panggilan ke metode IStream::Write oleh aplikasi.

Perubahan harus dilakukan pada antarmuka IWiaTransfer sebagai bagian dari penerapan lapisan kompatibilitas; Fungsi IWiaTransfer::EnumWIA_FORMAT_INFO ditambahkan ke IWiaTransfer untuk memungkinkan transfer TYMED_MULTIPAGE_FILE. Penambahan ini bukan konsekuensi dari lapisan kompatibilitas, tetapi diperlukan karena tidak mungkin untuk sampai ke antarmuka IWiaDataTransfer dari antarmuka IWiaTransfer atau dari antarmuka IWiaItem2 ke antarmuka IWiaItem .

Antarmuka IWiaDataTransfer, IWiaTransfer, IWiaItem, IWiaItem2, dan IStream serta struktur STGMEDIUM dibahas dalam dokumentasi Microsoft Windows SDK.

IWiaMiniDrvTransferCallback