Я пишу драйвер ядра Windows.Мне нужно создать новый запрос ввода-вывода и выделить собственную память для буфера ввода.
// Create request
WDFREQUEST request;
status = WdfRequestCreate(WDF_NO_OBJECT_ATTRIBUTES, target, &request);
if (!NT_SUCCESS(status)) {
goto exit;
}
// Allocate buffer for request
WDFMEMORY inputMemory;
status = WdfMemoryCreate(WDF_NO_OBJECT_ATTRIBUTES, PagedPool, 0, 1024, &inputMemory, NULL);
if (!NT_SUCCESS(status)) {
goto exit;
}
// Assign input buffer to request
status = WdfIoTargetFormatRequestForIoctl(target, request, IOCTL_FOO, inputMemory, NULL, NULL, NULL);
if (!NT_SUCCESS(status)) {
goto exit;
}
// Asynchronously send the ioctl request
WdfRequestSetCompletionRoutine(request, MyCompletionRoutine, NULL);
if (!WdfRequestSend(request, target, NULL)) {
status = WdfRequestGetStatus(request);
goto exit;
}
Мой вопрос: если WdfIoTargetFormatRequestForIoctl
завершится успешно, я должен также выполнить WdfObjectDelete(inputMemory)
в своей очисткеили WdfObjectDelete(request)
уничтожит как память, так и запрос?Кроме того, является ли ответ одинаковым как для устранения ошибок в функции, так и в процедуре завершения?