📄 file.c
字号:
BOOL RELFSD_WriteFileWithSeek( FileState *pfs, PCVOID pBuffer, DWORD cbWrite, PDWORD pNumBytesWritten,
LPOVERLAPPED lpOverlapped, DWORD dwLowOffset, DWORD dwHighOffset)
{
BOOL fSuccess;
LONGLONG pos;
int nWritten;
#ifdef NO_PAGING
SetLastError (ERROR_NOT_SUPPORTED);
return FALSE;
#endif
DEBUGMSG(ZONE_APIS, (TEXT("ReleaseFSD: FSD_WriteFileWithSeek %#x bytes\n"), cbWrite));
fSuccess = FALSE;
EnterCriticalSectionMM(g_pcsMain);
pos = ((LONGLONG)dwHighOffset << 32) | (LONGLONG)dwLowOffset;
rlseek(pfs->fs_Handle,(LONG)pos & -1,SEEK_SET);
nWritten = rwrite(pfs->fs_Handle, (unsigned char *) pBuffer, cbWrite);
LeaveCriticalSectionMM(g_pcsMain);
if (nWritten < 0) {
nWritten = 0;
fSuccess = FALSE;
} else {
fSuccess = TRUE;
}
if (pNumBytesWritten)
*pNumBytesWritten = (DWORD)nWritten;
return fSuccess;
}
DWORD RELFSD_SetFilePointer( FileState *pfs, LONG lDistanceToMove, PLONG pDistanceToMoveHigh, DWORD dwMoveMethod)
{
LONG lPos;
DEBUGMSG(ZONE_APIS, (TEXT("ReleaseFSD: FSD_SetFilePointer(%d,%d)\n"), lDistanceToMove, dwMoveMethod));
EnterCriticalSectionMM(g_pcsMain);
switch (dwMoveMethod) {
case FILE_BEGIN:
{
lPos = rlseek(pfs->fs_Handle, lDistanceToMove, SEEK_SET);
break;
}
case FILE_CURRENT:
{
lPos = rlseek(pfs->fs_Handle, lDistanceToMove, SEEK_CUR);
break;
}
case FILE_END :
{
lPos = rlseek(pfs->fs_Handle, lDistanceToMove, SEEK_END);
break;
}
default:
{
LeaveCriticalSectionMM(g_pcsMain);
SetLastError(ERROR_INVALID_PARAMETER);
return 0xffffffff;
}
}
if (pDistanceToMoveHigh)
*pDistanceToMoveHigh = 0;
SetLastError(NO_ERROR);
LeaveCriticalSectionMM(g_pcsMain);
return lPos;
}
DWORD RELFSD_GetFileSize(FileState *pfs, PDWORD pFileSizeHigh)
{
LONG lSize;
LONG lPos;
DEBUGMSG(ZONE_APIS, (TEXT("ReleaseFSD: FSD_GetFileSize\n")));
EnterCriticalSectionMM(g_pcsMain);
lPos = rlseek(pfs->fs_Handle, 0, SEEK_CUR);
lSize = rlseek(pfs->fs_Handle, 0, SEEK_END);
rlseek(pfs->fs_Handle, lPos, SEEK_SET);
LeaveCriticalSectionMM(g_pcsMain);
if (pFileSizeHigh)
*pFileSizeHigh = 0;
return lSize;
}
BOOL RELFSD_GetFileInformationByHandle(FileState *pfs, PBY_HANDLE_FILE_INFORMATION pFileInfo)
{
DEBUGMSG(ZONE_APIS, (TEXT("ReleaseFSD: FSD_GetFileInformationByHandle\n")));
memset(pFileInfo, 0, sizeof(*pFileInfo));
pFileInfo->dwFileAttributes = FILE_ATTRIBUTE_NORMAL;
pFileInfo->dwVolumeSerialNumber = (DWORD)pfs->fs_Volume;
pFileInfo->nFileSizeLow = RELFSD_GetFileSize(pfs, &pFileInfo->nFileSizeHigh);
pFileInfo->nNumberOfLinks = 1;
pFileInfo->dwOID = (DWORD)INVALID_HANDLE_VALUE;
return TRUE;
}
BOOL RELFSD_FlushFileBuffers(FileState *pfs)
{
DWORD dwError =ERROR_NOT_SUPPORTED;
BOOL fSuccess = FALSE;
if (dwError) {
SetLastError( dwError);
}
return fSuccess;
}
BOOL RELFSD_GetFileTime( FileState *pfs, PFILETIME pCreation, PFILETIME pLastAccess, PFILETIME pLastWrite)
{
BOOL fSuccess = FALSE;
DEBUGMSG(ZONE_APIS, (TEXT("ReleaseFSD: GetFileTime\n")));
EnterCriticalSectionMM(g_pcsMain);
fSuccess = rgettime(pfs->fs_Handle, pCreation, pLastAccess, pLastWrite);
LeaveCriticalSectionMM(g_pcsMain);
return fSuccess;
}
BOOL RELFSD_SetFileTime(FileState *pfs, PFILETIME pCreation, PFILETIME pLastAccess, PFILETIME pLastWrite)
{
BOOL fSuccess = FALSE;
DEBUGMSG(ZONE_APIS, (TEXT("ReleaseFSD: SetFileTime\n")));
EnterCriticalSectionMM(g_pcsMain);
fSuccess = rsettime(pfs->fs_Handle, pCreation, pLastAccess, pLastWrite);
LeaveCriticalSectionMM(g_pcsMain);
return fSuccess;
}
BOOL RELFSD_SetEndOfFile(FileState *pfs)
{
DEBUGMSG(ZONE_APIS, (TEXT("ReleaseFSD: FSD_SetEndOfFile\n")));
SetLastError(ERROR_NOT_SUPPORTED);
return FALSE;
}
BOOL RELFSD_DeviceIoControl( FileState *pfs, DWORD dwIoControlCode, PBYTE lpInBuf, DWORD nInBufSize,
PBYTE lpOutBuf, DWORD nOutBufSize, PDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped)
{
BOOL result = 0;
DWORD hKey, dwType, dwSize, dwIndex;
CHAR* szName;
LPBYTE lpbData;
EnterCriticalSectionMM(g_pcsMain);
switch (dwIoControlCode)
{
case IOCTL_REG_OPEN:
{
DEBUGMSG(ZONE_APIS, (TEXT("ReleaseFSD: RegOpen\n")));
memcpy( (BYTE *)&hKey, lpInBuf, sizeof(DWORD));
szName = lpInBuf + sizeof(DWORD);
result = rRegOpen (hKey, szName, (DWORD*)lpOutBuf);
if (result != -1) {
*lpBytesReturned = nOutBufSize;
}
DEBUGMSG(ZONE_APIS, (TEXT("RegOpen returned %08X, result=%08X on %08X:%a\n"), *((DWORD *)lpOutBuf), result, hKey, szName));
}
break;
case IOCTL_REG_CLOSE:
{
DEBUGMSG(ZONE_APIS, (TEXT("ReleaseFSD: RegClose\n")));
memcpy( (BYTE *)&hKey, lpInBuf, sizeof(DWORD));
*lpBytesReturned = nOutBufSize;
result = rRegClose (hKey);
DEBUGMSG(ZONE_APIS, (TEXT("RegClose returned %d\n"), result));
}
break;
case IOCTL_REG_GET:
{
DEBUGMSG(ZONE_APIS, (TEXT("ReleaseFSD: RegGet\n")));
memcpy( (BYTE *)&hKey, lpInBuf, sizeof(DWORD));
szName = lpInBuf + sizeof(DWORD);
lpbData = (LPBYTE) HeapAlloc (GetProcessHeap(), 0, MAX_PATH);
result = rRegGet (hKey, szName, &dwType, lpbData, &dwSize);
*lpBytesReturned = nOutBufSize;
memcpy (lpOutBuf, &dwType, sizeof(DWORD));
memcpy (lpOutBuf + sizeof(DWORD), &dwSize, sizeof(DWORD));
memcpy (lpOutBuf + 2*sizeof(DWORD), lpbData, dwSize);
HeapFree (GetProcessHeap(), 0, lpbData);
DEBUGMSG(ZONE_APIS, (TEXT("RegGet returned %d on %a\n"), result, szName));
}
break;
case IOCTL_REG_ENUM:
{
DEBUGMSG(ZONE_APIS, (TEXT("ReleaseFSD: RegEnum\n")));
memcpy (&hKey, lpInBuf, sizeof(DWORD));
memcpy (&dwIndex, lpInBuf+sizeof(DWORD), sizeof(DWORD));
lpbData = (LPBYTE) HeapAlloc (GetProcessHeap(), 0, MAX_PATH);
result = rRegEnum (hKey, dwIndex, lpbData, &dwSize);
*lpBytesReturned = nOutBufSize;
memcpy (lpOutBuf, &dwSize, sizeof(DWORD));
memcpy (lpOutBuf + sizeof(DWORD), lpbData, dwSize);
HeapFree (GetProcessHeap(), 0, lpbData);
DEBUGMSG(ZONE_APIS, (TEXT("RegEnum returned %d\n"), result));
}
break;
case IOCTL_WRITE_DEBUG:
{
WCHAR* wzName;
DEBUGMSG(ZONE_APIS, (TEXT("ReleaseFSD: PpfsWriteDebugString\n")));
wzName = (WCHAR*) lpInBuf;
PpfsWriteDebugString (wzName);
*lpBytesReturned = nOutBufSize;
result = TRUE;
DEBUGMSG(ZONE_APIS, (TEXT("Leaving PpfsWriteDebugString")));
}
break;
}
LeaveCriticalSectionMM(g_pcsMain);
return result;
}
BOOL RELFSD_GetVolumeInfo(VolumeState *pVolume, FSD_VOLUME_INFO *pInfo)
{
pInfo->dwFlags = FSD_FLAG_NETWORK;
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -