⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 partition.cpp

📁 WinCE5.0部分核心源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:

BOOL CPartition::GetPartitionInfo(PARTINFO *pInfo)
{
    __try {
        pInfo->bPartType = m_pi.bPartType;
        pInfo->dwAttributes = m_dwFlags;
        memcpy( &pInfo->ftCreated, &m_pi.ftCreated, sizeof(FILETIME));
        memcpy( &pInfo->ftLastModified, &m_pi.ftLastModified, sizeof(FILETIME));
        pInfo->snNumSectors = m_pi.snNumSectors;
        VERIFY(SUCCEEDED(StringCchCopy( pInfo->szPartitionName, PARTITIONNAMESIZE, m_szPartitionName)));
        if (wcslen(m_szFriendlyName)) {
            wcsncpy( pInfo->szFileSys, m_szFriendlyName, FILESYSNAMESIZE-1);
        } else {    
            wcsncpy( pInfo->szFileSys, m_szFileSys, FILESYSNAMESIZE-1);
        }    
        pInfo->szFileSys[FILESYSNAMESIZE-1] = 0;
        if (m_hFSD && m_pDsk && m_pDsk->pVol) {
            VERIFY(SUCCEEDED(StringCchCopy(pInfo->szVolumeName, VOLUMENAMESIZE, m_pDsk->pVol->wsVol)));
        } else {
            VERIFY(SUCCEEDED(StringCchCopy(pInfo->szVolumeName, VOLUMENAMESIZE, L"")));
        }   
    } __except(EXCEPTION_EXECUTE_HANDLER) {
        return FALSE;
    }
    return TRUE;
}


BOOL CPartition::LoadPartition(LPCTSTR szPartitionName)
{
    wcsncpy( m_szPartitionName, szPartitionName, PARTITIONNAMESIZE-1);
    m_szPartitionName[PARTITIONNAMESIZE-1] = 0;
    m_pPartDriver->GetPartitionInfo(m_dwStoreId, szPartitionName, &m_pi);
    return TRUE;
}

BOOL CPartition::MountPartition(HANDLE hPartition, LPCTSTR szRootRegKey, LPCTSTR szDefaultFileSystem, DWORD dwMountFlags,  HANDLE hActivityEvent, BOOL bFormat)
{
    TCHAR szRegKey[MAX_PATH];
    TCHAR szPartId[10];
    HKEY hKey = NULL;
    m_hPartition = hPartition;
    BOOL bRet = TRUE;
    DWORD dwTmpFlags;
    DWORD dwCheckForFormat = 0;

    VERIFY(SUCCEEDED(StringCchCopy(m_szRootKey, MAX_PATH, szRootRegKey)));

    FsdRegOpenKey( m_szRootKey, &hKey);
    if (hKey) {
        FsdGetRegistryValue(hKey, g_szCHECKFORFORMAT,  &dwCheckForFormat);
        FsdRegCloseKey( hKey);
    }

    VERIFY(SUCCEEDED(StringCchPrintf(szRegKey, MAX_PATH, L"%s\\%s", m_szRootKey, g_szPART_TABLE_STRING)));
    
    VERIFY(SUCCEEDED(StringCchCopy(m_szFileSys, FILESYSNAMESIZE, szDefaultFileSystem)));
    if (ERROR_SUCCESS != FsdRegOpenKey( szRegKey, &hKey)) {
        VERIFY(SUCCEEDED(StringCchPrintf(szRegKey, MAX_PATH, L"%s\\%s", g_szSTORAGE_PATH, g_szPART_TABLE_STRING)));
        FsdRegOpenKey( szRegKey, &hKey);
    }    
    if (hKey) {
        TCHAR* szTempId = szPartId;
        DUMPREGKEY(ZONE_INIT, szRegKey, hKey);

        // Convert m_pi.bPartType into a string in %02x format.
        if (m_pi.bPartType < 0x10)
            *szTempId++ = L'0';
        _itow (m_pi.bPartType, szTempId, 16);
        
        if (!FsdGetRegistryString(hKey, szPartId, m_szFileSys, sizeof(m_szFileSys)/sizeof(WCHAR))) {
            VERIFY(SUCCEEDED(StringCchCopy(m_szFileSys, FILESYSNAMESIZE, szDefaultFileSystem)));
        }    
        FsdRegCloseKey(hKey);
    }    

    VERIFY(SUCCEEDED(StringCchPrintf(szRegKey, MAX_PATH, L"%s\\%s", m_szRootKey, m_szFileSys)));
    if (ERROR_SUCCESS == FsdRegOpenKey( szRegKey, &hKey)) {
        TCHAR szFolderName[FOLDERNAMESIZE];
        GetMountSettings(hKey, &dwMountFlags);
        if (FsdGetRegistryValue(hKey,  g_szCHECKFORFORMAT, &dwTmpFlags)) {
            dwCheckForFormat = dwTmpFlags;
        }
        if (FsdGetRegistryString(hKey, g_szFOLDER_NAME_STRING, szFolderName, sizeof(szFolderName)/sizeof(WCHAR))) {
            VERIFY(SUCCEEDED(StringCchCopy(m_szFolderName, FOLDERNAMESIZE, szFolderName)));
        }
        FsdRegCloseKey(hKey);
    }    

    VERIFY(SUCCEEDED(StringCchPrintf(szRegKey, MAX_PATH, L"%s\\%s", m_szRootKey, m_szPartitionName)));
    if (ERROR_SUCCESS == FsdRegOpenKey( szRegKey, &hKey)) {
        TCHAR szFolderName[FOLDERNAMESIZE];
        GetMountSettings(hKey, &dwMountFlags);
        if (FsdGetRegistryString(hKey, g_szFOLDER_NAME_STRING, szFolderName, sizeof(szFolderName)/sizeof(WCHAR))) {
            VERIFY(SUCCEEDED(StringCchCopy(m_szFolderName, FOLDERNAMESIZE, szFolderName)));
        }
        FsdRegCloseKey( hKey);
    }
    
    m_dwMountFlags = dwMountFlags;
#ifdef UNDER_CE    
    if (dwCheckForFormat == 1) {
        STORAGECONTEXT sc;
        BOOL fFormat = 0;
        memset(&sc, 0, sizeof(sc));
        sc.cbSize = sizeof(sc);
        m_pStore->GetStoreInfo( &sc.StoreInfo);
        GetPartitionInfo(&sc.PartInfo);
        sc.dwFlags = m_dwMountFlags;
        if (KernelIoControl(IOCTL_HAL_QUERY_FORMAT_PARTITION, &sc, sizeof(sc), (LPBYTE)&fFormat, sizeof(BOOL), NULL) && fFormat) {
            FormatPartition(m_pi.bPartType, FALSE);
            bFormat = TRUE;
        }
    }
#endif // UNDER_CE    
    if (wcslen(m_szFileSys)) {
        GetFSDString( g_szFILE_SYSTEM_MODULE_STRING, m_szModuleName, sizeof(m_szModuleName)/sizeof(WCHAR));
        GetFSDString( g_szFILE_SYSTEM_MODULE_STRING, m_szFriendlyName, sizeof(m_szFriendlyName)/sizeof(WCHAR));
        if (m_szModuleName) {
            m_hFSD = LoadDriver( m_szModuleName);
            if (m_hFSD) {
                FSDINITDATA fid;
                fid.pIoControl = (PDEVICEIOCONTROL)PartitionIoControl;
                fid.hDsk = (HANDLE)this;
                fid.hPartition = hPartition;
                fid.dwFlags = m_dwMountFlags;
                fid.hActivityEvent = hActivityEvent;
                fid.pPartition = this;
                fid.pStore = m_pStore;

                VERIFY(SUCCEEDED(StringCchCopy(fid.szFileSysName, FILESYSNAMESIZE, m_szFileSys)));
                VERIFY(SUCCEEDED(StringCchCopy(fid.szRegKey, MAX_PATH, szRootRegKey)));
                VERIFY(SUCCEEDED(StringCchCopy(fid.szDiskName, MAX_PATH, m_szPartitionName)));
                fid.hFSD = m_hFSD;
                fid.pNextDisk = NULL;
                fid.bFormat = bFormat;
                m_pDsk = InitEx( &fid);
            }    
        }    
    }    
    if (m_pDsk) {
        m_dwFlags |= PARTITION_ATTRIBUTE_MOUNTED;
    } else {
        if (m_hFSD) {
            FreeLibrary( m_hFSD);
            m_hFSD = NULL;
        }
        bRet = FALSE;
    }    
    return bRet;
}

BOOL CPartition::UnmountPartition()
{
    if (m_dwMountFlags & MOUNTFLAGS_TYPE_NODISMOUNT)
        return FALSE;
    if (m_pDsk) {
        if (!DeinitEx(m_pDsk)) {
            return FALSE;
        }    
        m_pDsk = NULL;
    }    
    if (m_hFSD) {
        FreeLibrary( m_hFSD);
        m_hFSD = NULL;
    }    
    m_dwFlags &= ~PARTITION_ATTRIBUTE_MOUNTED;
#ifdef UNDER_CE
    CloseHandle( m_hPartition);
#endif
    return TRUE;
}

BOOL CPartition::RenamePartition(LPCTSTR szNewName)
{
    DWORD dwError = ERROR_SUCCESS;
    if (ERROR_SUCCESS == (dwError = m_pPartDriver->RenamePartition(m_dwStoreId, m_szPartitionName, szNewName))) {
        VERIFY(SUCCEEDED(StringCchCopy(m_szPartitionName, PARTITIONNAMESIZE, szNewName)));
        return TRUE;
    }
    SetLastError(dwError);
    return FALSE;
}    

BOOL CPartition::FormatPartition(BYTE bPartType, BOOL bAuto)
{
    DWORD dwError = ERROR_SUCCESS;
    if (ERROR_SUCCESS == (dwError = m_pPartDriver->FormatPartition(m_dwStoreId, m_szPartitionName, bPartType, bAuto))) {
        m_pPartDriver->GetPartitionInfo(m_dwStoreId, m_szPartitionName, &m_pi);
        return TRUE;
    }
    SetLastError(dwError);
    return FALSE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -