[Kernel] ObReferenceObjectByHandle Cleanup
This commit is contained in:
@@ -254,25 +254,31 @@ dword_result_t ObReferenceObjectByHandle_entry(dword_t handle,
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint32_t native_ptr = object->guest_object();
|
uint32_t native_ptr = object->guest_object();
|
||||||
auto& object_types =
|
|
||||||
kernel_state()->host_object_type_enum_to_guest_object_type_ptr_;
|
if (object_type_ptr) {
|
||||||
auto object_type = object_types.find(object->type());
|
auto& object_types =
|
||||||
if (object_type != object_types.end()) {
|
kernel_state()->host_object_type_enum_to_guest_object_type_ptr_;
|
||||||
if (object_type_ptr && object_type_ptr != object_type->second) {
|
|
||||||
return X_STATUS_OBJECT_TYPE_MISMATCH;
|
if (object_types.contains(object->type())) {
|
||||||
|
if (object_type_ptr != object_types[object->type()]) {
|
||||||
|
return X_STATUS_OBJECT_TYPE_MISMATCH;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
assert_unhandled_case(object->type());
|
||||||
|
native_ptr = 0xDEADF00D;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
assert_unhandled_case(object->type());
|
|
||||||
native_ptr = 0xDEADF00D;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Caller takes the reference.
|
// Caller takes the reference.
|
||||||
// It's released in ObDereferenceObject.
|
// It's released in ObDereferenceObject.
|
||||||
object->RetainHandle();
|
object->RetainHandle();
|
||||||
|
|
||||||
xenia_assert(native_ptr != 0);
|
assert_not_zero(native_ptr);
|
||||||
|
|
||||||
if (out_object_ptr.guest_address()) {
|
if (out_object_ptr.guest_address()) {
|
||||||
*out_object_ptr = native_ptr;
|
*out_object_ptr = native_ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
return X_STATUS_SUCCESS;
|
return X_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
DECLARE_XBOXKRNL_EXPORT1(ObReferenceObjectByHandle, kNone, kImplemented);
|
DECLARE_XBOXKRNL_EXPORT1(ObReferenceObjectByHandle, kNone, kImplemented);
|
||||||
|
|||||||
Reference in New Issue
Block a user