示例#1
0
// TODO: manage file sizes larger than 4 GB (usbs etc)
HRESULT InlineMd5( char *value ) {
	CHAR bytes[0x10]; CHAR byteStr[0x22];
	UINT outLen = 0x22;
	memset( bytes, 0, 0x10 ); 
	memset( byteStr, 0, 0x22 );
	XeCryptMd5( (const PBYTE)value, strlen(value), NULL, NULL, NULL, NULL, (PBYTE)bytes, 0x10 );
	memset(value, 0, 0x23);
	GetBytesString( (BYTE*)bytes, 0x10, byteStr, &outLen );
	strcpy_s(value, 0x22, byteStr);
	return S_OK;
}
示例#2
0
HRESULT Drive::Mount()
{
	// Get our serial
	LoadSerial();

	// Get our serial as a string
	CHAR serialStr[41]; serialStr[40] = 0; UINT outLen = 0x40;
	GetBytesString(m_Serial, 0x14, serialStr, &outLen);
	m_SerialStr = (string)serialStr;
	if (m_DriveType == DEVICE_USBMEMORY_UNIT0 || 
		m_DriveType == DEVICE_USBMEMORY_UNIT1 ||
		m_DriveType == DEVICE_USBMEMORY_UNIT2 )
		m_SerialStr = m_SerialStr + "_USBMU";
	if (m_DriveType == DEVICE_USBMEMORY_Cache0 ||
		m_DriveType == DEVICE_USBMEMORY_Cache1 ||
		m_DriveType == DEVICE_USBMEMORY_Cache2 )
		m_SerialStr = m_SerialStr + "_USBMUC";

	//DebugMsg("Mounting %s",m_MountPoint.c_str());
	char MountConv[260];
	sprintf_s( MountConv, "\\??\\%s", m_MountPoint.c_str() );
	char SysPath[260];
	sprintf_s( SysPath,"%s", m_SystemPath.c_str() );

	STRING sSysPath = { (USHORT)strlen( SysPath ), (USHORT)strlen( SysPath ) + 1, SysPath };
	STRING sMountConv = { (USHORT)strlen( MountConv ), (USHORT)strlen( MountConv ) + 1, MountConv };
	
	//don't try to mount 'Game:' as it's already there
	if (stricmp(m_MountPoint.c_str(), "Game:") != 0)
	{
		int res = ObCreateSymbolicLink( &sMountConv, &sSysPath );
	
		if (res != 0)
		{
			//DebugMsg("Mount failed : %d",res);
			return res;
		}
	}

	HRESULT ret = IsMounted();
	if(ret == 1)
	{
		GetDiskFreeSpaceEx(getRootPath().c_str(),&m_FreeBytesAvailable,&m_TotalNumberOfBytes,&m_TotalNumberOfFreeBytes);
	}
	else
	{
		m_FreeBytesAvailable.QuadPart = 0;
		m_TotalNumberOfBytes.QuadPart =0;
		m_TotalNumberOfFreeBytes.QuadPart=0;

	}
	return ret;
}