|
RtlXxx tizim registriga to'g'ridan-to'g'ri kirish funktsiyalari
|
bet | 54/64 | Sana | 13.05.2024 | Hajmi | 183,36 Kb. | | #230077 |
Bog'liq Системное программирование, практикаRtlXxx tizim registriga to'g'ridan-to'g'ri kirish funktsiyalari
RtlCheckRegistryKey Agar ko'rsatilgan ichki kalit qo'ng'iroqning birinchi parametri bilan tavsiflangan pastki kalit ichida mavjud bo'lsa, STATUS_SUCCESS qaytaradi. Birinchi parametr RTL_REGISTRY_Xxx qiymatlaridan biri sifatida belgilangan. Masalan, \Registry\Machine\System\CurrentControlSet\Services bo'limi RTL_REGISTRY_SERVICES qiymati bilan tavsiflanadi va \Registry\User\CurrentUser bo'limi RTL_REGISTRY_USER qiymati bilan tavsiflanadi (ntddk.h yoki wdm.h sarlavhasiga qarang) .
RtlCreateRegistryKey yuqorida tavsiflangan funksiya bilan bir xil ishlaydigan ikkinchi parametr bilan belgilangan Registr pastki kaliti ichida pastki kalitni yaratadi. RtlCheckRegistryKey .
RtlQueryRegistryValues bitta qo'ng'iroq bilan ko'rsatilgan Registr pastki kalitining butun pastki daraxtidan bir nechta parametrlarning qiymatlarini olish imkonini beradi. Kerakli parametr aniqlanganda, haydovchi tomonidan taqdim etilgan QueryRoutine qayta qo'ng'iroq qilish protsedurasi chaqiriladi. Biroq, har xil DDK misollarida bu qo'ng'iroqni QueryRoutine qayta qo'ng'iroq qilish protsedurasi bilan ishlatishning birorta ham holati mavjud emas. Amalda, qiyinchilik RtlQueryRegistryValues RTL_QUERY_REGISTRY_DIRECT bayrog'ini o'z ichiga olgan birinchi parametr bilan bajariladi, unda qayta qo'ng'iroq qilish protsedurasi ishlatilmaydi.
RtlWriteRegistryValue Tizim registri parametrining qiymatini yozadi. Yo'l davomida bitta ichki bo'lim yaratilishi mumkin, quyidagi misolga qarang.
UNICODE_STRING newParameterUnicodeTextValue;
RtlInitUnicodeString( &newParameterUnicodeTextValue,
L"Misol matn parametri 1");
NTSTATUS holati =
RtlWriteRegistryValue (RTL_REGISTRY_SERVICES,
L"Misol1\\InnerKey",
L "NewParameter", // siz hatto L "Insted Section" ham mumkin
REG_SZ,
newParameterUnicodeTextValue.Bufer,
sizeof(WCHAR)*( wcslen(newParameterUnicodeTextValue.Bufer)+1)
);
agar (!NT_SUCCESS( status ) )
{
#agar DBG
DbgPrint("RtlWriteRegistryValue chaqiruvi muvaffaqiyatsiz.");
#endif
}
Birinchidan RTL_REGISTRY_SERVICES parametri belgilaydi yoqilgan nima harakatlar bo'ladi amalga oshirilsin V bo'lim \Registry \ Machine\System\CurrentControlSet\Services yoki , ichida umumiy qabul qilingan shartlari , HKLM\SYSTEM\CurrentControlSet\Services. Ichki pastki kalit bo'lishi kerak \Misol1. Keyin ikkita variant mumkin: \Misol1-kichik bo'limida mavjud \InnerKey bo'limi mavjud yoki \InnerKey bo'limi mavjud emas (bu holda u yaratiladi). Qo'ng'iroq natijasi HKLM\SYSTEM\CurrentControlSet\Services\Example1\InnerKey bo'limi bo'ladi, unda "Misol matn parametri 1" qiymatiga ega NewParameter qator parametri mavjud.
Nafaqat \InnerKey kichik bo'limi, balki \Example1 kichik bo'limi ham mavjud bo'lmasa, qo'ng'iroq RtlWriteRegistryValue muvaffaqiyatsiz tugadi.
Agar barcha ko'rsatilgan kichik bo'limlar mavjud bo'lsa va NewParameter parametri allaqachon ma'lum qiymatga ega bo'lsa, yuqorida tavsiflangan misolda bo'lgani kabi, harakatlar ketma-ketligi natijasida tizim registriga yangi qiymat yoziladi, ya'ni "Misol. matn parametri 1".
|
| |