Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
The RtlCompareDeviceMemory function compares two blocks of device memory and returns the number of bytes that match until the first difference. Эта функция безопасна для использования в памяти устройства, так как она использует доступ на уровне байтов, которые гарантированно выполняются как указанные.
Syntax
SIZE_T RtlCompareDeviceMemory(
[in] const VOID *Source1,
[in] const VOID *Source2,
[in] SIZE_T Length
);
Parameters
[in] Source1
Указатель на первый блок памяти для сравнения.
[in] Source2
Указатель на второй блок памяти для сравнения.
[in] Length
Число байтов для сравнения.
Return value
RtlCompareDeviceMemory returns the number of bytes in the two blocks that match. If all bytes match up to the specified Length value, the Length value is returned.
Remarks
Функция не распознается как встроенный компилятор, поэтому компилятор никогда не оптимизирует вызов (полностью или замените вызов эквивалентной последовательностью инструкций). This differs from RtlCompareMemory which is subject to various compiler optimizations.
Функция использует доступ на уровне байтов, чтобы обеспечить правильную обработку памяти устройства, которая может иметь побочные эффекты или специальные требования к доступу.
Подпрограмма начинается с сравнения первого байта в первом блоке с первым байтом во втором блоке и продолжает сравнивать последовательные байты в двух блоках во время сопоставления байтов. The routine stops comparing bytes when it encounters the first pair of bytes that are not equal, or when the number of matching bytes equals the Length parameter value, whichever occurs first.
Функция может выполнять неуправляемый доступ к памяти, если платформа позволяет ей.
Эта функция работает во всех версиях Windows, а не только на последних версиях. Чтобы получить объявление функции из заголовка wdm.h, необходимо использовать последнюю версию WDK. Вам также нужна библиотека (volatileaccessk.lib) из последней версии WDK. Однако результирующий драйвер будет работать в более ранних версиях Windows.
Example
UCHAR DeviceBuffer1[256];
UCHAR DeviceBuffer2[256];
// Read data from device memory into buffers
ReadFromDevice(DeviceBuffer1, sizeof(DeviceBuffer1));
ReadFromDevice(DeviceBuffer2, sizeof(DeviceBuffer2));
// Compare the device memory buffers
size_t matchingBytes = RtlCompareDeviceMemory(DeviceBuffer1, DeviceBuffer2, sizeof(DeviceBuffer1));
if (matchingBytes == sizeof(DeviceBuffer1)) {
// All bytes matched
DbgPrint("Device buffers are identical\n");
} else {
// Difference found at byte offset 'matchingBytes'
DbgPrint("Device buffers differ starting at byte %zu\n", matchingBytes);
}
Requirements
| Requirement | Value |
|---|---|
| Header | wdm.h (include Wdm.h) |
| Library | volatileaccessk.lib (режим ядра), volatileaccessu.lib (режим пользователя) |