Mulai cepat: Mengatur dan mendapatkan label sensitivitas (C++)
Mulai Cepat ini menunjukkan kepada Anda cara menggunakan lebih banyak SDK File MIP. Dengan menggunakan salah satu label sensitivitas yang Anda cantumkan di Mulai Cepat sebelumnya, Anda menggunakan handler File untuk mengatur/mendapatkan label pada file. Kelas Handler file mengekspos berbagai operasi untuk mengatur/mendapatkan label, atau perlindungan, untuk jenis file yang didukung.
Prasyarat
Jika Anda belum melakukannya, pastikan untuk menyelesaikan prasyarat berikut sebelum melanjutkan:
- Selesaikan Mulai Cepat: Mencantumkan label sensitivitas (C++) terlebih dahulu, yang membangun solusi Visual Studio pemula, untuk mencantumkan label sensitivitas organisasi. Mulai cepat "Atur dan dapatkan label sensitivitas" ini dibuat pada yang sebelumnya.
- Secara opsional: Tinjau Penangan file dalam konsep MIP SDK .
Menerapkan kelas pengamat untuk memantau objek handler File
Mirip dengan pengamat yang Anda terapkan (untuk profil file dan mesin) di Mulai Cepat inisialisasi Aplikasi, sekarang Anda menerapkan kelas pengamat untuk objek handler File.
Buat implementasi dasar untuk pengamat handler File, dengan memperluas kelas SDK mip::FileHandler::Observer
. Pengamat diinstansiasi dan digunakan nanti, untuk memantau operasi penanganan File.
Buka solusi Visual Studio yang Anda kerjakan di artikel "Mulai Cepat: Daftar label sensitivitas (C++)" sebelumnya.
Tambahkan kelas baru ke proyek Anda, yang menghasilkan file header/.h dan implementasi/.cpp untuk Anda:
- Di Penjelajah Solusi, klik kanan simpul proyek lagi, pilih Tambahkan, lalu pilih Kelas.
- Pada dialog Tambahkan Kelas:
- Di bidang Nama Kelas, masukkan "filehandler_observer". Perhatikan bahwa bidang file .h dan file .cpp diisi secara otomatis, berdasarkan nama yang Anda masukkan.
- Setelah selesai, klik tombol OK .
Setelah membuat file .h dan .cpp untuk kelas , kedua file dibuka di tab Grup Editor. Sekarang perbarui setiap file untuk mengimplementasikan kelas pengamat baru Anda:
Perbarui "filehandler_observer.h", dengan memilih/menghapus kelas yang dihasilkan
filehandler_observer
. Jangan hapus arahan preproscessor yang dihasilkan oleh langkah sebelumnya (#pragma, #include). Kemudian salin/tempel sumber berikut ke dalam file, setelah direktif praprosesor yang ada:#include <memory> #include "mip/file/file_engine.h" #include "mip/file/file_handler.h" class FileHandlerObserver final : public mip::FileHandler::Observer { public: FileHandlerObserver() { } // Observer implementation void OnCreateFileHandlerSuccess(const std::shared_ptr<mip::FileHandler>& fileHandler, const std::shared_ptr<void>& context) override; void OnCreateFileHandlerFailure(const std::exception_ptr& error, const std::shared_ptr<void>& context) override; void OnCommitSuccess(bool committed, const std::shared_ptr<void>& context) override; void OnCommitFailure(const std::exception_ptr& error, const std::shared_ptr<void>& context) override; };
Perbarui "filehandler_observer.cpp", dengan memilih/menghapus implementasi kelas yang dihasilkan
filehandler_observer
. Jangan hapus arahan preproscessor yang dihasilkan oleh langkah sebelumnya (#pragma, #include). Kemudian salin/tempel sumber berikut ke dalam file, setelah direktif praprosesor yang ada:void FileHandlerObserver::OnCreateFileHandlerSuccess(const std::shared_ptr<mip::FileHandler>& fileHandler, const std::shared_ptr<void>& context) { auto promise = std::static_pointer_cast<std::promise<std::shared_ptr<mip::FileHandler>>>(context); promise->set_value(fileHandler); } void FileHandlerObserver::OnCreateFileHandlerFailure(const std::exception_ptr & error, const std::shared_ptr<void>& context) { auto promise = std::static_pointer_cast<std::promise<std::shared_ptr<mip::FileHandler>>>(context); promise->set_exception(error); } void FileHandlerObserver::OnCommitSuccess(bool committed, const std::shared_ptr<void>& context) { auto promise = std::static_pointer_cast<std::promise<bool>>(context); promise->set_value(committed); } void FileHandlerObserver::OnCommitFailure(const std::exception_ptr & error, const std::shared_ptr<void>& context) { auto promise = std::static_pointer_cast<std::promise<bool>>(context); promise->set_exception(error); }
Secara opsional, gunakan F6 (Build Solution) untuk menjalankan kompilasi/tautan pengujian solusi Anda, untuk memastikannya berhasil dibangun sebelum melanjutkan.
Menambahkan logika untuk mengatur dan mendapatkan label sensitivitas
Tambahkan logika untuk mengatur dan mendapatkan label sensitivitas pada file, menggunakan objek Mesin file.
Dengan menggunakan Penjelajah Solusi, buka file .cpp dalam proyek Anda yang berisi implementasi
main()
metode . Ini default ke nama yang sama dengan proyek yang berisinya, yang Anda tentukan selama pembuatan proyek.Tambahkan arahan dan
using
berikut#include
, di bawah arahan yang ada yang sesuai, di bagian atas file:#include "filehandler_observer.h" #include "mip/file/file_handler.h" using mip::FileHandler;
Menjelang akhir
main()
isi, di bawah dansystem("pause");
di atasreturn 0;
(tempat Anda meninggalkan di Mulai Cepat sebelumnya), sisipkan kode berikut:// Set up async FileHandler for input file operations string inputFilePath = "<input-file-path>"; string actualFilePath = "<content-identifier>"; std::shared_ptr<FileHandler> handler; try { auto handlerPromise = std::make_shared<std::promise<std::shared_ptr<FileHandler>>>(); auto handlerFuture = handlerPromise->get_future(); engine->CreateFileHandlerAsync( inputFilePath, actualFilePath, true, std::make_shared<FileHandlerObserver>(), handlerPromise); handler = handlerFuture.get(); } catch (const std::exception& e) { cout << "An exception occurred... did you specify a valid input file path?\n\n" << e.what() << "'\n"; system("pause"); return 1; } // Set a label on input file try { string labelId = "<label-id>"; cout << "\nApplying Label ID " << labelId << " to " << filePathIn << endl; mip::LabelingOptions labelingOptions(mip::AssignmentMethod::PRIVILEGED); handler->SetLabel(engine->GetLabelById(labelId), labelingOptions, new ProtectionSettings()); } catch (const std::exception& e) { cout << "An exception occurred... did you specify a valid label ID?\n\n" << e.what() << "'\n"; system("pause"); return 1; } // Commit changes, save as a different/output file string filePathOut = "<output-file-path>"; try { cout << "Committing changes" << endl; auto commitPromise = std::make_shared<std::promise<bool>>(); auto commitFuture = commitPromise->get_future(); handler->CommitAsync(filePathOut, commitPromise); if (commitFuture.get()) { cout << "\nLabel committed to file: " << filePathOut << endl; } else { cout << "Failed to label: " + filePathOut << endl; return 1; } } catch (const std::exception& e) { cout << "An exception occurred... did you specify a valid commit file path?\n\n" << e.what() << "'\n"; system("pause"); return 1; } system("pause"); // Set up async FileHandler for output file operations actualFilePath = "<content-identifier>"; try { auto handlerPromise = std::make_shared<std::promise<std::shared_ptr<FileHandler>>>(); auto handlerFuture = handlerPromise->get_future(); engine->CreateFileHandlerAsync( filePathOut, actualFilePath, true, std::make_shared<FileHandlerObserver>(), handlerPromise); handler = handlerFuture.get(); } catch (const std::exception& e) { cout << "An exception occurred... did you specify a valid output file path?\n\n" << e.what() << "'\n"; system("pause"); return 1; } // Get the label from output file try { cout << "\nGetting the label committed to file: " << filePathOut << endl; auto label = handler->GetLabel(); cout << "Name: " + label->GetLabel()->GetName() << endl; cout << "Id: " + label->GetLabel()->GetId() << endl; } catch (const std::exception& e) { cout << "An exception occurred... did you specify a valid label ID?\n\n" << e.what() << "'\n"; system("pause"); return 1; } system("pause");
Menjelang akhir
main()
menemukan blok matikan aplikasi yang dibuat di mulai cepat pertama dan batalkan komentar baris handler:// Application shutdown. Null out profile and engine, call ReleaseAllResources(); // Application may crash at shutdown if resources aren't properly released. profile = nullptr; engine = nullptr; handler = nullptr; mipContext = nullptr;
Ganti nilai tempat penampung dalam kode sumber yang Anda sebagai berikut, menggunakan konstanta string:
Placeholder Nilai <input-file-path> Jalur lengkap ke file input pengujian, misalnya: "c:\\Test\\Test.docx"
.<pengidentifikasi konten> Pengidentifikasi yang dapat dibaca manusia untuk konten tersebut. Misalnya: - untuk file, pertimbangkan path\filename:
"c:\Test\Test.docx"
- untuk email, pertimbangkan subject:sender :
"RE: Audit design:user1@contoso.com"
<label-id> ID label sensitivitas, disalin dari output konsol di Mulai Cepat sebelumnya, misalnya: "f42a3342-8706-4288-bd31-ebb85995028z"
.<output-file-path> Jalur lengkap ke file output, yang akan menjadi salinan berlabel file input, misalnya: "c:\\Test\\Test_labeled.docx"
.- untuk file, pertimbangkan path\filename:
Membangun dan menguji aplikasi
Buat dan uji aplikasi klien Anda.
Gunakan F6 (Build Solution) untuk membangun aplikasi klien Anda. Jika Anda tidak memiliki kesalahan build, gunakan F5 (Mulai penelusuran kesalahan) untuk menjalankan aplikasi Anda.
Jika proyek Anda berhasil membangun dan berjalan, aplikasi meminta token akses, setiap kali SDK memanggil metode Anda
AcquireOAuth2Token()
. Seperti yang Anda lakukan sebelumnya di Mulai Cepat "Daftar label sensitivitas", jalankan skrip PowerShell Anda untuk memperoleh token setiap kali, menggunakan nilai yang disediakan untuk $authority dan $resourceUrl.Run the PowerShell script to generate an access token using the following values, then copy/paste it below: Sensitivity labels for your organization: Non-Business : 87ba5c36-17cf-14793-bbc2-bd5b3a9f95cz Public : 83867195-f2b8-2ac2-b0b6-6bb73cb33afz General : f42a3342-8706-4288-bd31-ebb85995028z Confidential : 074e457c-5848-4542-9a6f-34a182080e7z Highly Confidential : f55c2dea-db0f-47cd-8520-a52e1590fb6z Press any key to continue . . . Applying Label ID 074e457c-5848-4542-9a6f-34a182080e7z to c:\Test\Test.docx Committing changes Label committed to file: c:\Test\Test_labeled.docx Press any key to continue . . . Getting the label committed to file: c:\Test\Test_labeled.docx Name: Confidential Id: 074e457c-5848-4542-9a6f-34a182080e7z Press any key to continue . . .
Anda dapat memverifikasi aplikasi label, dengan membuka file output dan memeriksa pengaturan perlindungan informasi dokumen secara visual.
Catatan
Jika Anda memberi label dokumen Office, tetapi tidak masuk menggunakan akun dari penyewa Microsoft Entra tempat token akses diperoleh (dan label sensitivitas dikonfigurasi), Anda mungkin diminta untuk masuk sebelum Anda bisa membuka dokumen berlabel.
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