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

📄 file.c

📁 我自己编译的armv4i wince60模拟器的bps源文件,已经验证可以使用,欢迎下载
💻 C
📖 第 1 页 / 共 3 页
字号:
    if( gvpServerPB->fPosition > pFileData->fSize )
        pFileData->fSize = gvpServerPB->fPosition;

Done:;
    LeaveCriticalSection(&g_csMain);
    DEBUGMSG( ZONE_APIS,( TEXT( "VCEFSD: -FSD_WriteFile" ) ) );
    
    pFileData->fPosition += totalCount;

    // Return bytes written...
    *pNumBytesWritten = totalCount;
    return( error == 0 );
}


//--------------------------------------------------------------------------------
//
//--------------------------------------------------------------------------------
DWORD VCEFSD_SetFilePointer(    FileData* pFileData,
                                LONG lDistanceToMove, 
                                PLONG pDistanceToMoveHigh, 
                                DWORD dwMoveMethod )
{
    LONG lPos = -1;
    
    DEBUGMSG( ZONE_APIS,( TEXT( "VCEFSD: +FSD_SetFilePointer" ) ) );
    EnterCriticalSection(&g_csMain);
    
    // Why? Don't ask me...
    if( pDistanceToMoveHigh )
        *pDistanceToMoveHigh = 0;
    
    // Verify the file handle
    if( ValidateFileHandle( pFileData ) == FALSE )
        goto Done;

    // Compute the new position based on move method...
    switch( dwMoveMethod ) 
    {
        case FILE_BEGIN:
        {
            lPos = pFileData->fPosition = lDistanceToMove;
            break;
        }

        case FILE_CURRENT:
        {
            lPos = pFileData->fPosition += lDistanceToMove;
            break;
        }

        case FILE_END :
        {
            lPos = pFileData->fPosition = pFileData->fSize - lDistanceToMove;
            break;
        }

        default:
        {   
            SetLastError(ERROR_INVALID_PARAMETER);
            break;
        }
    }
    
    SetLastError(NO_ERROR);
Done:;
    LeaveCriticalSection(&g_csMain);
    DEBUGMSG( ZONE_APIS,( TEXT( "VCEFSD: -FSD_SetFilePointer\n" ) ) );
    return( lPos );
}


//--------------------------------------------------------------------------------
//
//--------------------------------------------------------------------------------
BOOL VCEFSD_ReadFileWithSeek(   FileData* pFileData,
                                PBYTE pBuffer, 
                                DWORD cbRead, 
                                PDWORD pNumBytesRead, 
                                LPOVERLAPPED lpOverlapped, 
                                DWORD dwLowOffset, 
                                DWORD dwHighOffset )
{
    BOOL bRet;
    DWORD lPos;
    DEBUGCHK(pFileData != NULL);

    // If pBuffer and cbRead are both zero we are supposed to return TRUE or FALSE
    // to indicate whether we do or do not support paging.
    if (pBuffer == NULL && cbRead == 0) {
        return TRUE; // indicate that we support demand paging
    }

    EnterCriticalSection(&g_csMain);
    lPos = VCEFSD_SetFilePointer( pFileData, dwLowOffset, NULL, FILE_BEGIN );
    
    *pNumBytesRead = 0;

    if (lPos == -1) {
        bRet = FALSE;
    } else {
        bRet = VCEFSD_ReadFile( pFileData, pBuffer, cbRead, pNumBytesRead, NULL );
    }
    LeaveCriticalSection(&g_csMain);
    return bRet;
}


//--------------------------------------------------------------------------------
//
//--------------------------------------------------------------------------------
BOOL VCEFSD_WriteFileWithSeek(  FileData* pFileData,
                                PBYTE pBuffer, 
                                DWORD cbWrite, 
                                PDWORD pNumBytesWritten, 
                                LPOVERLAPPED lpOverlapped, 
                                DWORD dwLowOffset, 
                                DWORD dwHighOffset )
{
    BOOL bRet;
    DWORD lPos;
    DEBUGMSG(ZONE_APIS, (TEXT("VCEFSD: FSD_WriteFileWithSeek\n")));
    
    *pNumBytesWritten = 0;
    EnterCriticalSection(&g_csMain);
    lPos = VCEFSD_SetFilePointer( pFileData, dwLowOffset, NULL, FILE_BEGIN );
    
    if( lPos == -1 ) {
        bRet = FALSE;
    } else {
        bRet = VCEFSD_WriteFile( pFileData, pBuffer, cbWrite, pNumBytesWritten, NULL );
    }
    LeaveCriticalSection(&g_csMain);
    return bRet;
}


//--------------------------------------------------------------------------------
//
//--------------------------------------------------------------------------------
DWORD VCEFSD_GetFileSize(   FileData* pFileData, 
                            PDWORD pFileSizeHigh)
{
    LONG lSize;

    DEBUGMSG(ZONE_APIS, (TEXT("VCEFSD: FSD_GetFileSize\n")));

    EnterCriticalSection(&g_csMain);

    lSize = pFileData->fSize;

    LeaveCriticalSection(&g_csMain);

    if (pFileSizeHigh) // Gack!
        *pFileSizeHigh = 0;

    return lSize;
}


//--------------------------------------------------------------------------------
//
//--------------------------------------------------------------------------------
BOOL VCEFSD_GetFileInformationByHandle( FileData* pFileData,
                                        PBY_HANDLE_FILE_INFORMATION pFileInfo)
{
    DEBUGMSG(ZONE_APIS, (TEXT("VCEFSD: FSD_GetFileInformationByHandle\n")));

    memset(pFileInfo, 0, sizeof(*pFileInfo));
    pFileInfo->dwFileAttributes = pFileData->fFileAttributes;
    pFileInfo->dwVolumeSerialNumber = (DWORD)pFileData->pVolumeState;
    pFileInfo->nFileSizeLow = pFileData->fSize;
    pFileInfo->nNumberOfLinks = 1;
    pFileInfo->dwOID = (DWORD)INVALID_HANDLE_VALUE;

    return TRUE;
}


//--------------------------------------------------------------------------------
//
//--------------------------------------------------------------------------------
BOOL VCEFSD_FlushFileBuffers( FileData* pFileData )
{
    return TRUE;
}


//--------------------------------------------------------------------------------
//
//--------------------------------------------------------------------------------
BOOL VCEFSD_GetFileTime(    FileData* pFileData, 
                            PFILETIME pCreation, 
                            PFILETIME pLastAccess, 
                            PFILETIME pLastWrite ) 
{
    BOOL fSuccess = FALSE;

    DEBUGMSG(ZONE_APIS, (TEXT("VCEFSD: FSD_GetFileTime\n")));

    EnterCriticalSection(&g_csMain);

    if( pCreation != NULL )
    {
        LongToFileTime( pFileData->fFileCreateTimeDate, pCreation );
        fSuccess = TRUE;
    }
    
    if( pLastAccess != NULL )
    {
        LongToFileTime( pFileData->fFileTimeDate, pLastAccess );
        fSuccess = TRUE;
    }
    
    if( pLastWrite != NULL )
    {   
        LongToFileTime( pFileData->fFileTimeDate, pLastWrite );
        fSuccess = TRUE;
    }

    LeaveCriticalSection(&g_csMain);

    return fSuccess;
}


//--------------------------------------------------------------------------------
//
//--------------------------------------------------------------------------------
BOOL VCEFSD_SetFileTime(    FileData* pFileData, 
                            PFILETIME pCreation, 
                            PFILETIME pLastAccess, 
                            PFILETIME pLastWrite ) 
{
    BOOL fSuccess = FALSE;

    DEBUGMSG(ZONE_APIS, (TEXT("VCEFSD: FSD_SetFileTime\n")));

    EnterCriticalSection(&g_csMain);

    if( pCreation != NULL )
    {
        pFileData->fFileCreateTimeDate = FileTimeToLong( pCreation );
        fSuccess = TRUE;
    }

    if( pLastWrite != NULL )
    {
        pFileData->fFileTimeDate = FileTimeToLong( pLastWrite );
        fSuccess = TRUE;
    }

    LeaveCriticalSection(&g_csMain);

    return fSuccess;
}


//--------------------------------------------------------------------------------
//
//--------------------------------------------------------------------------------
BOOL VCEFSD_SetEndOfFile( FileData* pFileData )
{
    VolumeState*    pVolumeState;
    BOOL            fSuccess = FALSE;

    DEBUGMSG(ZONE_APIS, (TEXT("VCEFSD: FSD_SetEndOfFile\n")));
    EnterCriticalSection(&g_csMain);

    pVolumeState =( VolumeState* )pFileData->fResHandle;

    // Init PB
    memset( gvpServerPB, 0, sizeof(ServerPB) );
    gvpServerPB->fStructureSize = sizeof(ServerPB);
    gvpServerPB->fHandle = pFileData->fHandle;
    gvpServerPB->fPosition = pFileData->fPosition;
    gvpServerPB->fSize = pFileData->fSize;
    
    if( ServerSetEOF( gvpServerPB ) == 0 )  {
        fSuccess = TRUE;
        pFileData->fSize = gvpServerPB->fSize;
    }

    LeaveCriticalSection(&g_csMain);

    return fSuccess;
}



//--------------------------------------------------------------------------------
//
//--------------------------------------------------------------------------------
BOOL LongToFileTime( LONG longTime, PFILETIME pft )
{
    FILETIME    ft;
    SYSTEMTIME  st;
    WORD        dosDate;
    WORD        dosTime;

    dosTime = LOWORD(longTime);
    dosDate = HIWORD(longTime);

    st.wYear = (dosDate >> 9) + 1980;
    st.wMonth = (dosDate >> 5) & 0xf;
    st.wDayOfWeek = 0;
    st.wDay = dosDate & 0x1f;
    st.wHour = dosTime >> 11;
    st.wMinute = (dosTime >> 5) & 0x3f;
    st.wSecond = (dosTime & 0x1f) << 1;
    st.wMilliseconds = 0;

    if (SystemTimeToFileTime(&st, &ft)) 
    {
        if (LocalFileTimeToFileTime(&ft, pft)) 
        {
            return TRUE;
        }
    }
    return FALSE;
}



//--------------------------------------------------------------------------------
//
//--------------------------------------------------------------------------------
LONG FileTimeToLong( PFILETIME pft )
{
    FILETIME ft;
    SYSTEMTIME st;

    WORD    dosDate;
    WORD    dosTime;
    LONG    outTime = 0;

    if( FileTimeToLocalFileTime(pft, &ft) )
    {
        if( FileTimeToSystemTime(&ft, &st) )
        {
            dosDate = ((st.wYear-1980) << 9) | (st.wMonth << 5) | (st.wDay);
            dosTime = (st.wHour << 11) | (st.wMinute << 5) | (st.wSecond >> 1);

            outTime = MAKELONG(dosTime,dosDate);
        }
    }
    return outTime;
}

⌨️ 快捷键说明

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