} \
}
+#define CHECK_ALLOC(MappedBuffer, BufferLength) \
+{ \
+ NTSTATUS Status; \
+ PVOID BaseAddress; \
+ SIZE_T Size; \
+ BaseAddress = MappedBuffer; \
+ Size = BufferLength; \
+ Status = NtAllocateVirtualMemory(NtCurrentProcess(), \
+ &BaseAddress, \
+ 0, \
+ &Size, \
+ MEM_RESERVE, \
+ PAGE_READWRITE); \
+ ok_eq_hex(Status, STATUS_CONFLICTING_ADDRESSES); \
+ BaseAddress = MappedBuffer; \
+ Size = 0; \
+ Status = NtFreeVirtualMemory(NtCurrentProcess(), \
+ &BaseAddress, \
+ &Size, \
+ MEM_DECOMMIT); \
+ ok_eq_hex(Status, STATUS_UNABLE_TO_DELETE_SECTION); \
+ BaseAddress = MappedBuffer; \
+ Size = 0; \
+ Status = NtFreeVirtualMemory(NtCurrentProcess(), \
+ &BaseAddress, \
+ &Size, \
+ MEM_RELEASE); \
+ ok_eq_hex(Status, STATUS_UNABLE_TO_DELETE_SECTION); \
+ Status = NtUnmapViewOfSection(NtCurrentProcess(), \
+ MappedBuffer); \
+ ok_eq_hex(Status, STATUS_NOT_MAPPED_VIEW); \
+}
+
START_TEST(MmMapLockedPagesSpecifyCache)
{
QUERY_BUFFER QueryBuffer;
ok(KmtSendBufferToDriver(IOCTL_QUERY_BUFFER, &QueryBuffer, sizeof(QUERY_BUFFER), &Length) == ERROR_SUCCESS, "\n");
ok_eq_int(QueryBuffer.Length, BufferLength);
ok(QueryBuffer.Buffer != NULL, "Buffer is NULL\n");
+ CHECK_ALLOC(QueryBuffer.Buffer, BufferLength);
Length = 0;
FILL_READ_BUFFER(QueryBuffer, ReadBuffer);
ok(KmtSendBufferToDriver(IOCTL_QUERY_BUFFER, &QueryBuffer, sizeof(QUERY_BUFFER), &Length) == ERROR_SUCCESS, "\n");
ok_eq_int(QueryBuffer.Length, BufferLength);
ok(QueryBuffer.Buffer != NULL, "Buffer is NULL\n");
+ CHECK_ALLOC(QueryBuffer.Buffer, BufferLength);
Length = 0;
FILL_READ_BUFFER(QueryBuffer, ReadBuffer);
ok(KmtSendBufferToDriver(IOCTL_QUERY_BUFFER, &QueryBuffer, sizeof(QUERY_BUFFER), &Length) == ERROR_SUCCESS, "\n");
ok_eq_int(QueryBuffer.Length, BufferLength);
ok(QueryBuffer.Buffer != NULL, "Buffer is NULL\n");
+ CHECK_ALLOC(QueryBuffer.Buffer, BufferLength);
Length = 0;
FILL_READ_BUFFER(QueryBuffer, ReadBuffer);
ok(KmtSendBufferToDriver(IOCTL_QUERY_BUFFER, &QueryBuffer, sizeof(QUERY_BUFFER), &Length) == ERROR_SUCCESS, "\n");
ok_eq_int(QueryBuffer.Length, BufferLength);
ok(QueryBuffer.Buffer != NULL, "Buffer is NULL\n");
+ CHECK_ALLOC(QueryBuffer.Buffer, BufferLength);
Length = 0;
FILL_READ_BUFFER(QueryBuffer, ReadBuffer);
ok(KmtSendBufferToDriver(IOCTL_QUERY_BUFFER, &QueryBuffer, sizeof(QUERY_BUFFER), &Length) == ERROR_SUCCESS, "\n");
ok_eq_int(QueryBuffer.Length, BufferLength);
ok(QueryBuffer.Buffer != NULL, "Buffer is NULL\n");
+ CHECK_ALLOC(QueryBuffer.Buffer, BufferLength);
Length = 0;
FILL_READ_BUFFER(QueryBuffer, ReadBuffer);
ok(KmtSendBufferToDriver(IOCTL_QUERY_BUFFER, &QueryBuffer, sizeof(QUERY_BUFFER), &Length) == ERROR_SUCCESS, "\n");
ok_eq_int(QueryBuffer.Length, BufferLength);
ok(QueryBuffer.Buffer != NULL, "Buffer is NULL\n");
+ CHECK_ALLOC(QueryBuffer.Buffer, BufferLength);
Length = 0;
FILL_READ_BUFFER(QueryBuffer, ReadBuffer);
ok(KmtSendBufferToDriver(IOCTL_QUERY_BUFFER, &QueryBuffer, sizeof(QUERY_BUFFER), &Length) == ERROR_SUCCESS, "\n");
ok_eq_int(QueryBuffer.Length, BufferLength);
ok(QueryBuffer.Buffer != NULL, "Buffer is NULL\n");
+ CHECK_ALLOC(QueryBuffer.Buffer, BufferLength);
Length = 0;
FILL_READ_BUFFER(QueryBuffer, ReadBuffer);
ok(KmtSendBufferToDriver(IOCTL_QUERY_BUFFER, &QueryBuffer, sizeof(QUERY_BUFFER), &Length) == ERROR_SUCCESS, "\n");
ok_eq_int(QueryBuffer.Length, BufferLength);
ok(QueryBuffer.Buffer != NULL, "Buffer is NULL\n");
+ CHECK_ALLOC(QueryBuffer.Buffer, BufferLength);
Length = 0;
FILL_READ_BUFFER(QueryBuffer, ReadBuffer);
ok(KmtSendBufferToDriver(IOCTL_QUERY_BUFFER, &QueryBuffer, sizeof(QUERY_BUFFER), &Length) == ERROR_SUCCESS, "\n");
ok_eq_int(QueryBuffer.Length, BufferLength);
ok(QueryBuffer.Buffer != NULL, "Buffer is NULL\n");
+ CHECK_ALLOC(QueryBuffer.Buffer, BufferLength);
Length = 0;
FILL_READ_BUFFER(QueryBuffer, ReadBuffer);
ok(KmtSendBufferToDriver(IOCTL_QUERY_BUFFER, &QueryBuffer, sizeof(QUERY_BUFFER), &Length) == ERROR_SUCCESS, "\n");
ok_eq_int(QueryBuffer.Length, BufferLength);
ok(QueryBuffer.Buffer != NULL, "Buffer is NULL\n");
+ CHECK_ALLOC(QueryBuffer.Buffer, BufferLength);
Length = 0;
FILL_READ_BUFFER(QueryBuffer, ReadBuffer);