HRESULT Drive::Unmount( ) { char MountConv[16]; sprintf_s( MountConv,"\\??\\%s", m_MountPoint.c_str() ); STRING sMountConv = { (USHORT)strlen(MountConv), (USHORT)strlen(MountConv) + 1, MountConv }; return ( HRESULT ) ObDeleteSymbolicLink( &sMountConv ); }
HRESULT xbox_io_mount(const char* szDrive, char* szDevice) { STRING DeviceName, LinkName; CHAR szDestinationDrive[PATH_MAX_LENGTH]; sprintf_s(szDestinationDrive, PATH_MAX_LENGTH, "\\??\\%s", szDrive); RtlInitAnsiString(&DeviceName, szDevice); RtlInitAnsiString(&LinkName, szDestinationDrive); ObDeleteSymbolicLink(&LinkName); return (HRESULT)ObCreateSymbolicLink(&LinkName, &DeviceName); }
HRESULT UnmountPath( const PCHAR szDrive ) { PCHAR szSysStr = NULL; if ( KeGetCurrentProcessType() == SYSTEM_PROC ) szSysStr = "\\System??\\%s"; else szSysStr = "\\??\\%s"; CHAR szDestinationDrive[ MAX_PATH ]; sprintf_s( szDestinationDrive, MAX_PATH, szSysStr, szDrive ); STRING strLinkName = MAKE_STRING( szDestinationDrive ); return ObDeleteSymbolicLink( &strLinkName ); }