XApiVerifyMediaInDrive now passes validation without patches
This commit is contained in:
parent
cedc176eb6
commit
a160db2c72
|
@ -1008,6 +1008,44 @@ static VOID WRITE_REGISTER_ULONG(PVOID Address, ULONG Value)
|
|||
};
|
||||
}
|
||||
|
||||
typedef struct _SCSI_PASS_THROUGH_DIRECT {
|
||||
USHORT Length;
|
||||
UCHAR ScsiStatus;
|
||||
UCHAR PathId;
|
||||
UCHAR TargetId;
|
||||
UCHAR Lun;
|
||||
UCHAR CdbLength;
|
||||
UCHAR SenseInfoLength;
|
||||
UCHAR DataIn;
|
||||
ULONG DataTransferLength;
|
||||
ULONG TimeOutValue;
|
||||
PVOID DataBuffer;
|
||||
ULONG SenseInfoOffset;
|
||||
UCHAR Cdb[16];
|
||||
}SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
|
||||
|
||||
typedef struct _MODE_PARAMETER_HEADER10 {
|
||||
UCHAR ModeDataLength[2];
|
||||
UCHAR MediumType;
|
||||
UCHAR DeviceSpecificParameter;
|
||||
UCHAR Reserved[2];
|
||||
UCHAR BlockDescriptorLength[2];
|
||||
}MODE_PARAMETER_HEADER10, *PMODE_PARAMETER_HEADER10;
|
||||
|
||||
typedef struct _DVDX2_AUTHENTICATION_PAGE {
|
||||
UCHAR Unknown[2];
|
||||
UCHAR PartitionArea;
|
||||
UCHAR CDFValid;
|
||||
UCHAR Authentication;
|
||||
UCHAR Unknown2[3];
|
||||
ULONG Unknown3[3];
|
||||
} DVDX2_AUTHENTICATION_PAGE, *PDVDX2_AUTHENTICATION_PAGE;
|
||||
|
||||
typedef struct _DVDX2_AUTHENTICATION {
|
||||
MODE_PARAMETER_HEADER10 Header;
|
||||
DVDX2_AUTHENTICATION_PAGE AuthenticationPage;
|
||||
} DVDX2_AUTHENTICATION, *PDVDX2_AUTHENTICATION;
|
||||
|
||||
// ******************************************************************
|
||||
// * Debug
|
||||
// ******************************************************************
|
||||
|
|
|
@ -454,35 +454,6 @@ extern "C" CXBXKRNL_API void CxbxKrnlInit
|
|||
strncpy_s((PSTR)DummyKernel->SectionHeader.Name, 8, "DONGS", 8);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// load the necessary pieces of XbeHeader
|
||||
//
|
||||
|
||||
{
|
||||
/*
|
||||
Xbe::Header *MemXbeHeader = (Xbe::Header*)0x00010000;
|
||||
|
||||
uint32 old_protection = 0;
|
||||
|
||||
VirtualProtect(MemXbeHeader, pXbeHeader->dwSizeofImage, PAGE_READWRITE, &old_protection);
|
||||
|
||||
// we sure hope we aren't corrupting anything necessary for an .exe to survive :]
|
||||
MemXbeHeader->dwSizeofHeaders = pXbeHeader->dwSizeofHeaders;
|
||||
MemXbeHeader->dwCertificateAddr = pXbeHeader->dwCertificateAddr;
|
||||
MemXbeHeader->dwPeHeapReserve = pXbeHeader->dwPeHeapReserve;
|
||||
MemXbeHeader->dwPeHeapCommit = pXbeHeader->dwPeHeapCommit;
|
||||
MemXbeHeader->dwPeStackCommit = pXbeHeader->dwPeStackCommit;
|
||||
|
||||
memcpy(&MemXbeHeader->dwInitFlags, &pXbeHeader->dwInitFlags, sizeof(pXbeHeader->dwInitFlags));
|
||||
|
||||
memcpy((void*)pXbeHeader->dwCertificateAddr, &((uint08*)pXbeHeader)[pXbeHeader->dwCertificateAddr - 0x00010000], sizeof(Xbe::Certificate)); */
|
||||
|
||||
// Patch AllowedMediaTypes to prevent XapiVerifyMediaInDrive() being called
|
||||
// This is necessary as we do not emulate XDVD verification
|
||||
((Xbe::Certificate*)pXbeHeader->dwCertificateAddr)->dwAllowedMedia |= 0x00FFFFFF;
|
||||
}
|
||||
|
||||
// Initialize devices :
|
||||
char szBuffer[260];
|
||||
SHGetSpecialFolderPath(NULL, szBuffer, CSIDL_APPDATA, TRUE);
|
||||
|
|
|
@ -3245,7 +3245,24 @@ XBSYSAPI EXPORTNUM(196) xboxkrnl::NTSTATUS NTAPI xboxkrnl::NtDeviceIoControlFile
|
|||
");\n",
|
||||
GetCurrentThreadId(), FileHandle, Event, ApcRoutine, ApcContext, IoStatusBlock, IoControlCode, InputBufferLength, OutputBuffer, OutputBufferLength);
|
||||
|
||||
CxbxKrnlCleanup("NtDeviceIoControlFile Not Implemented");
|
||||
switch (IoControlCode)
|
||||
{
|
||||
// IOCTL_SCSI_PASS_THROUGH_DIRECT
|
||||
case 0x4D014:
|
||||
{
|
||||
PSCSI_PASS_THROUGH_DIRECT PassThrough = (PSCSI_PASS_THROUGH_DIRECT)InputBuffer;
|
||||
PDVDX2_AUTHENTICATION Authentication = (PDVDX2_AUTHENTICATION)PassThrough->DataBuffer;
|
||||
|
||||
// Should be just enough info to pass XapiVerifyMediaInDrive
|
||||
Authentication->AuthenticationPage.CDFValid = 1;
|
||||
Authentication->AuthenticationPage.PartitionArea = 1;
|
||||
Authentication->AuthenticationPage.Authentication = 1;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
CxbxKrnlCleanup("NtDeviceIoControlFile Not Implemented");
|
||||
}
|
||||
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue