[XAM/INFO] - Stub XamQueryLiveHive & XamGetLiveHiveValue functions
- Stub XamQueryLiveHive & XamGetLiveHiveValue functions - Stub XNetLogonGetMachineID
This commit is contained in:
committed by
Radosław Gliński
parent
6d530a1ab9
commit
a0e1ba8313
@@ -633,6 +633,8 @@ inline const std::unordered_map<uint32_t, std::string>
|
||||
{XEX_SYSTEM_CAMERA_ANGLE_CONTROL, "XEX_SYSTEM_CAMERA_ANGLE_CONTROL"},
|
||||
{XEX_SYSTEM_SKELETAL_TRACKING_REQUIRED,
|
||||
"XEX_SYSTEM_SKELETAL_TRACKING_REQUIRED"},
|
||||
{XEX_SYSTEM_SKELETAL_TRACKING_SUPPORTED,
|
||||
"XEX_SYSTEM_SKELETAL_TRACKING_SUPPORTED"},
|
||||
{XEX_SYSTEM_USE_LARGE_HDS_FILE_CACHE,
|
||||
"XEX_SYSTEM_USE_LARGE_HDS_FILE_CACHE"},
|
||||
{XEX_SYSTEM_TITLE_SUPPORTS_DEEP_LINK,
|
||||
|
||||
@@ -94,6 +94,101 @@ dword_result_t XamGetOnlineSchema_entry() {
|
||||
}
|
||||
DECLARE_XAM_EXPORT1(XamGetOnlineSchema, kNone, kImplemented);
|
||||
|
||||
dword_result_t XamQueryLiveHiveA_entry(
|
||||
lpstring_t feature_name, lpstring_t value_ptr, dword_t value_buffer_size,
|
||||
pointer_t<XAM_OVERLAPPED> overlapped_ptr) {
|
||||
// See Netplay, create shared function for both XamQueryLiveHiveA and
|
||||
// XamGetLiveHiveValueA
|
||||
X_RESULT extended_error = 0x80151802; // X_ONLINE_E_LOGON_NOT_LOGGED_ON
|
||||
if (!feature_name || !value_ptr || !value_buffer_size) {
|
||||
extended_error = X_E_INVALIDARG;
|
||||
}
|
||||
|
||||
if (overlapped_ptr) {
|
||||
kernel_state()->CompleteOverlappedImmediateEx(
|
||||
overlapped_ptr, X_STATUS_SUCCESS, extended_error, 0);
|
||||
return X_E_PENDING;
|
||||
} else {
|
||||
return extended_error;
|
||||
}
|
||||
}
|
||||
DECLARE_XAM_EXPORT1(XamQueryLiveHiveA, kMisc, kStub);
|
||||
|
||||
dword_result_t XamGetLiveHiveValueA_entry(
|
||||
lpstring_t feature_name, lpstring_t value_ptr, dword_t value_buffer_size,
|
||||
int_t unk, pointer_t<XAM_OVERLAPPED> overlapped_ptr) {
|
||||
// See Netplay
|
||||
X_RESULT result = 0x80151802; // X_ONLINE_E_LOGON_NOT_LOGGED_ON
|
||||
if (!feature_name || !value_ptr || !value_buffer_size) {
|
||||
result = X_E_INVALIDARG;
|
||||
}
|
||||
|
||||
auto thread = kernel::XThread::GetCurrentThread();
|
||||
auto ctx = thread->thread_state()->context();
|
||||
auto type = xboxkrnl::xeKeGetCurrentProcessType(ctx);
|
||||
if (unk == -1 && kernel_state()->emulator()->title_id() == kDashboardID &&
|
||||
type == 2) {
|
||||
return XamQueryLiveHiveA_entry(feature_name, value_ptr, value_buffer_size,
|
||||
overlapped_ptr);
|
||||
}
|
||||
|
||||
if (overlapped_ptr) {
|
||||
kernel_state()->CompleteOverlappedImmediate(overlapped_ptr, result);
|
||||
return X_ERROR_IO_PENDING;
|
||||
} else {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
DECLARE_XAM_EXPORT1(XamGetLiveHiveValueA, kMisc, kStub);
|
||||
|
||||
dword_result_t XamQueryLiveHiveW_entry(
|
||||
lpu16string_t feature_name, lpu16string_t value_ptr,
|
||||
dword_t value_buffer_size, pointer_t<XAM_OVERLAPPED> overlapped_ptr) {
|
||||
// See Netplay, create shared function for both XamQueryLiveHiveW and
|
||||
// XamGetLiveHiveValueW
|
||||
X_RESULT extended_error = 0x80151802; // X_ONLINE_E_LOGON_NOT_LOGGED_ON
|
||||
if (!feature_name || !value_ptr || !value_buffer_size) {
|
||||
extended_error = X_E_INVALIDARG;
|
||||
}
|
||||
|
||||
if (overlapped_ptr) {
|
||||
kernel_state()->CompleteOverlappedImmediateEx(
|
||||
overlapped_ptr, X_STATUS_SUCCESS, extended_error, 0);
|
||||
return X_E_PENDING;
|
||||
} else {
|
||||
return extended_error;
|
||||
}
|
||||
}
|
||||
DECLARE_XAM_EXPORT1(XamQueryLiveHiveW, kMisc, kStub);
|
||||
|
||||
dword_result_t XamGetLiveHiveValueW_entry(
|
||||
lpu16string_t feature_name, lpu16string_t value_ptr,
|
||||
dword_t value_buffer_size, int_t unk,
|
||||
pointer_t<XAM_OVERLAPPED> overlapped_ptr) {
|
||||
// See Netplay
|
||||
X_RESULT result = 0x80151802; // X_ONLINE_E_LOGON_NOT_LOGGED_ON
|
||||
if (!feature_name || !value_ptr || !value_buffer_size) {
|
||||
result = X_E_INVALIDARG;
|
||||
}
|
||||
|
||||
auto thread = kernel::XThread::GetCurrentThread();
|
||||
auto ctx = thread->thread_state()->context();
|
||||
auto type = xboxkrnl::xeKeGetCurrentProcessType(ctx);
|
||||
if (unk == -1 && kernel_state()->emulator()->title_id() == kDashboardID &&
|
||||
type == 2) {
|
||||
return XamQueryLiveHiveW_entry(feature_name, value_ptr, value_buffer_size,
|
||||
overlapped_ptr);
|
||||
}
|
||||
|
||||
if (overlapped_ptr) {
|
||||
kernel_state()->CompleteOverlappedImmediate(overlapped_ptr, result);
|
||||
return X_ERROR_IO_PENDING;
|
||||
} else {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
DECLARE_XAM_EXPORT1(XamGetLiveHiveValueW, kMisc, kStub);
|
||||
|
||||
dword_result_t keXamBuildResourceLocator(uint64_t module,
|
||||
const std::u16string& container,
|
||||
const std::u16string& resource,
|
||||
@@ -439,13 +534,6 @@ dword_result_t XamFree_entry(lpdword_t ptr) {
|
||||
}
|
||||
DECLARE_XAM_EXPORT1(XamFree, kMemory, kImplemented);
|
||||
|
||||
dword_result_t XamQueryLiveHiveW_entry(lpu16string_t name, lpvoid_t out_buf,
|
||||
dword_t out_size,
|
||||
dword_t type /* guess */) {
|
||||
return X_STATUS_INVALID_PARAMETER_1;
|
||||
}
|
||||
DECLARE_XAM_EXPORT1(XamQueryLiveHiveW, kNone, kStub);
|
||||
|
||||
// http://www.noxa.org/blog/2011/02/28/building-an-xbox-360-emulator-part-3-feasibilityos/
|
||||
// http://www.noxa.org/blog/2011/08/13/building-an-xbox-360-emulator-part-5-xex-files/
|
||||
dword_result_t RtlSleep_entry(dword_t dwMilliseconds, dword_t bAlertable) {
|
||||
|
||||
@@ -224,6 +224,13 @@ dword_result_t NetDll_XNetCleanup_entry(dword_t caller, lpvoid_t params) {
|
||||
}
|
||||
DECLARE_XAM_EXPORT1(NetDll_XNetCleanup, kNetworking, kImplemented);
|
||||
|
||||
dword_result_t XNetLogonGetMachineID_entry(lpqword_t machine_id_ptr) {
|
||||
// See Netplay
|
||||
*machine_id_ptr = 0;
|
||||
return 0x80151802; // X_ERROR_LOGON_NOT_LOGGED_ON;
|
||||
}
|
||||
DECLARE_XAM_EXPORT1(XNetLogonGetMachineID, kNetworking, kStub);
|
||||
|
||||
dword_result_t NetDll_XNetGetOpt_entry(dword_t one, dword_t option_id,
|
||||
lpvoid_t buffer_ptr,
|
||||
lpdword_t buffer_size) {
|
||||
|
||||
@@ -125,6 +125,7 @@ typedef uint32_t X_HRESULT;
|
||||
#define X_E_FALSE static_cast<X_HRESULT>(0x80000000L)
|
||||
#define X_E_SUCCESS X_HRESULT_FROM_WIN32(X_ERROR_SUCCESS)
|
||||
#define X_E_ACCESS_DENIED X_HRESULT_FROM_WIN32(X_ERROR_ACCESS_DENIED)
|
||||
#define X_E_PENDING X_HRESULT_FROM_WIN32(0x8000000AL)
|
||||
#define X_E_NOT_IMPLEMENTED static_cast<X_HRESULT>(0x80004001L)
|
||||
#define X_E_FAIL static_cast<X_HRESULT>(0x80004005L)
|
||||
#define X_E_NO_MORE_FILES X_HRESULT_FROM_WIN32(X_ERROR_NO_MORE_FILES)
|
||||
|
||||
Reference in New Issue
Block a user