IoAttachDevice
NTSTATUS __stdcall IoAttachDevice(
PDEVICE_OBJECT SourceDevice,
_UNICODE_STRING *TargetDevice,
PDEVICE_OBJECT *AttachedDevice,
INT64 a4,
INT64 a5,
INT64 a6,
INT64 a7,
INT64 a8){
NTSTATUS result;
int v11;
_DEVICE_OBJECT *v12;
_DEVICE_OBJECT *v13;
PVOID *Object;
UINT64 OpenOptions;
_IO_STATUS_BLOCK IoStatusBlock;
_OBJECT_ATTRIBUTES ObjectAttributes;
VOID *FileHandle;
PVOID v19;
*(&ObjectAttributes.Length + 1) = 0;
memset(&ObjectAttributes.Attributes + 1, 0, 20);
FileHandle = 0i64;
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.ObjectName = TargetDevice;
LODWORD(OpenOptions) = -2147483584;
ObjectAttributes.Length = 48;
LODWORD(Object) = 0;
ObjectAttributes.Attributes = IopCaseInsensitive != 0 ? 576 : 512;
IoStatusBlock = 0i64;
result = ZwOpenFile(&FileHandle, 0x80ui64, &ObjectAttributes, &IoStatusBlock, (UINT64)Object, OpenOptions);
if( result >= 0 )
{
v19 = 0i64;
v11 = ObReferenceObjectByHandle(FileHandle, 0i64, (_OBJECT_TYPE *)IoFileObjectType, 0, &v19, 0i64);
if( v11 < 0 )
{
ZwClose((_HANDLE)FileHandle);
}
else
{
LODWORD(v12) = IoGetRelatedDeviceObject((INT64)v19);
v13 = v12;
ZwClose((_HANDLE)FileHandle);
v11 = IoAttachDeviceToDeviceStackSafe(SourceDevice, v13, AttachedDevice);
HalPutDmaAdapter((PADAPTER_OBJECT)v19);
}
return v11;
}
return result;
}Referenced by:
No references.