Theory of Operation
R
42
SATA Programmer’s Reference Manual
Irp = IoBuildDeviceIoControlRequest( Ioctl, Pdo, InputBuffer, InputSize,
OutputBuffer, OutputSize, FALSE,
&evIoctl, &ioBlock);
if( !Irp)
status = STATUS_INSUFFICIENT_RESOURCES;
else {
pIrpStack = IoGetNextIrpStackLocation( Irp);
pIrpStack->MajorFunction = IRP_MJ_DEVICE_CONTROL;
// Pass the request to the Pdo, always wait for the completion
// routine
status = IoCallDriver( Pdo, Irp);
if( status == STATUS_PENDING)
// Wait for the IRP to be completed, then grab the real status code
KeWaitForSingleObject( &evIoctl, Executive, KernelMode, FALSE, NULL);
status = ioBlock.Status;
// Sanity check the data
if( OutputBuffer != NULL) {
if( OutputBuffer->Signature != ACPI_EVAL_OUTPUT_BUFFER_SIGNATURE
|| OutputBuffer->Count == 0)
status = STATUS_DATA_ERROR;
}
}
return( status);
}
Содержание 82801EB
Страница 6: ...R 6 SATA Programmer s Reference Manual This page is intentionally left blank...
Страница 8: ...Introduction R 8 SATA Programmer s Reference Manual This page is intentionally left blank...
Страница 10: ...Conventions R 10 SATA Programmer s Reference Manual This page is intentionally left blank...
Страница 30: ...Theory of Operation R 30 SATA Programmer s Reference Manual This page is intentionally left blank...
Страница 46: ...Theory of Operation R 46 SATA Programmer s Reference Manual This page is intentionally left blank...
Страница 59: ...Theory of Operation R SATA Programmer s Reference Manual 59...