NtDuplicateObject.

This commit is contained in:
Ben Vanik
2014-01-05 15:56:37 -08:00
parent e8ca05ca0a
commit 0f95864b8d
4 changed files with 80 additions and 24 deletions

View File

@@ -120,6 +120,11 @@ X_STATUS ObjectTable::AddHandle(XObject* object, X_HANDLE* out_handle) {
X_STATUS ObjectTable::RemoveHandle(X_HANDLE handle) {
X_STATUS result = X_STATUS_SUCCESS;
handle = TranslateHandle(handle);
if (!handle) {
return X_STATUS_INVALID_HANDLE;
}
xe_mutex_lock(table_mutex_);
// Lower 2 bits are ignored.
@@ -155,12 +160,9 @@ X_STATUS ObjectTable::GetObject(X_HANDLE handle, XObject** out_object) {
X_STATUS result = X_STATUS_SUCCESS;
if (handle == 0xFFFFFFFF) {
// CurrentProcess
XEASSERTALWAYS();
} else if (handle == 0xFFFFFFFE) {
// CurrentThread
handle = XThread::GetCurrentThreadHandle();
handle = TranslateHandle(handle);
if (!handle) {
return X_STATUS_INVALID_HANDLE;
}
xe_mutex_lock(table_mutex_);
@@ -191,3 +193,16 @@ X_STATUS ObjectTable::GetObject(X_HANDLE handle, XObject** out_object) {
*out_object = object;
return result;
}
X_HANDLE ObjectTable::TranslateHandle(X_HANDLE handle) {
if (handle == 0xFFFFFFFF) {
// CurrentProcess
XEASSERTALWAYS();
return 0;
} else if (handle == 0xFFFFFFFE) {
// CurrentThread
return XThread::GetCurrentThreadHandle();
} else {
return handle;
}
}