亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? copy.c

?? ReactOS是一些高手根據(jù)Windows XP的內核編寫出的類XP。內核實現(xiàn)機理和API函數(shù)調用幾乎相同。甚至可以兼容XP的程序。喜歡研究系統(tǒng)內核的人可以看一看。
?? C
字號:
/* $Id: copy.c 21253 2006-03-08 21:33:04Z audit $
 *
 * COPYRIGHT:       See COPYING in the top level directory
 * PROJECT:         ReactOS system libraries
 * FILE:            lib/kernel32/file/copy.c
 * PURPOSE:         Copying files
 * PROGRAMMER:      Ariadne (ariadne@xs4all.nl)
 * UPDATE HISTORY:
 *                  01/11/98 Created
 *                  07/02/99 Moved to seperate file
 */

/* INCLUDES ****************************************************************/

#include <k32.h>

#define NDEBUG
#include "../include/debug.h"


/* FUNCTIONS ****************************************************************/


static NTSTATUS
CopyLoop (
	HANDLE			FileHandleSource,
	HANDLE			FileHandleDest,
	LARGE_INTEGER		SourceFileSize,
	LPPROGRESS_ROUTINE	lpProgressRoutine,
	LPVOID			lpData,
	BOOL			*pbCancel,
	BOOL                 *KeepDest
	)
{
   NTSTATUS errCode;
   IO_STATUS_BLOCK IoStatusBlock;
   UCHAR *lpBuffer = NULL;
   SIZE_T RegionSize = 0x10000;
   LARGE_INTEGER BytesCopied;
   DWORD CallbackReason;
   DWORD ProgressResult;
   BOOL EndOfFileFound;

   *KeepDest = FALSE;
   errCode = NtAllocateVirtualMemory(NtCurrentProcess(),
				     (PVOID *)&lpBuffer,
				     2,
				     &RegionSize,
				     MEM_RESERVE | MEM_COMMIT,
				     PAGE_READWRITE);

   if (NT_SUCCESS(errCode))
     {
	BytesCopied.QuadPart = 0;
	EndOfFileFound = FALSE;
	CallbackReason = CALLBACK_STREAM_SWITCH;
	while (! EndOfFileFound &&
	       NT_SUCCESS(errCode) &&
	       (NULL == pbCancel || ! *pbCancel))
	  {
	     if (NULL != lpProgressRoutine)
	       {
		   ProgressResult = (*lpProgressRoutine)(SourceFileSize,
							 BytesCopied,
							 SourceFileSize,
							 BytesCopied,
							 0,
							 CallbackReason,
							 FileHandleSource,
							 FileHandleDest,
							 lpData);
		   switch (ProgressResult)
		     {
		     case PROGRESS_CANCEL:
			DPRINT("Progress callback requested cancel\n");
			errCode = STATUS_REQUEST_ABORTED;
			break;
		     case PROGRESS_STOP:
			DPRINT("Progress callback requested stop\n");
			errCode = STATUS_REQUEST_ABORTED;
			*KeepDest = TRUE;
			break;
		     case PROGRESS_QUIET:
			lpProgressRoutine = NULL;
			break;
		     case PROGRESS_CONTINUE:
		     default:
			break;
		     }
		   CallbackReason = CALLBACK_CHUNK_FINISHED;
	       }
	     if (NT_SUCCESS(errCode))
	       {
		  errCode = NtReadFile(FileHandleSource,
				       NULL,
				       NULL,
				       NULL,
				       (PIO_STATUS_BLOCK)&IoStatusBlock,
				       lpBuffer,
				       RegionSize,
				       NULL,
				       NULL);
		  if (NT_SUCCESS(errCode) && (NULL == pbCancel || ! *pbCancel))
		    {
		       errCode = NtWriteFile(FileHandleDest,
					     NULL,
					     NULL,
					     NULL,
					     (PIO_STATUS_BLOCK)&IoStatusBlock,
					     lpBuffer,
					     IoStatusBlock.Information,
					     NULL,
					     NULL);
		       if (NT_SUCCESS(errCode))
			 {
			    BytesCopied.QuadPart += IoStatusBlock.Information;
			 }
		       else
			 {
			    DPRINT("Error 0x%08x reading writing to dest\n", errCode);
			 }
		    }
		  else if (!NT_SUCCESS(errCode))
		    {
		       if (STATUS_END_OF_FILE == errCode)
			 {
			    EndOfFileFound = TRUE;
			    errCode = STATUS_SUCCESS;
			 }
		       else
			 {
			    DPRINT("Error 0x%08x reading from source\n", errCode);
			 }
		    }
	       }
	  }

	if (! EndOfFileFound && (NULL != pbCancel && *pbCancel))
	  {
	  DPRINT("User requested cancel\n");
	  errCode = STATUS_REQUEST_ABORTED;
	  }

	NtFreeVirtualMemory(NtCurrentProcess(),
			    (PVOID *)&lpBuffer,
			    &RegionSize,
			    MEM_RELEASE);
     }
   else
     {
	DPRINT("Error 0x%08x allocating buffer of %d bytes\n", errCode, RegionSize);
     }

   return errCode;
}

static NTSTATUS
SetLastWriteTime(
	HANDLE FileHandle,
	LARGE_INTEGER LastWriteTime
	)
{
   NTSTATUS errCode = STATUS_SUCCESS;
   IO_STATUS_BLOCK IoStatusBlock;
   FILE_BASIC_INFORMATION FileBasic;

   errCode = NtQueryInformationFile (FileHandle,
				     &IoStatusBlock,
				     &FileBasic,
				     sizeof(FILE_BASIC_INFORMATION),
				     FileBasicInformation);
   if (!NT_SUCCESS(errCode))
     {
	DPRINT("Error 0x%08x obtaining FileBasicInformation\n", errCode);
     }
   else
     {
	FileBasic.LastWriteTime.QuadPart = LastWriteTime.QuadPart;
	errCode = NtSetInformationFile (FileHandle,
					&IoStatusBlock,
					&FileBasic,
					sizeof(FILE_BASIC_INFORMATION),
					FileBasicInformation);
	if (!NT_SUCCESS(errCode))
	  {
	     DPRINT("Error 0x%0x setting LastWriteTime\n", errCode);
	  }
     }

   return errCode;
}


/*
 * @implemented
 */
BOOL
STDCALL
CopyFileExW (
	LPCWSTR			lpExistingFileName,
	LPCWSTR			lpNewFileName,
	LPPROGRESS_ROUTINE	lpProgressRoutine,
	LPVOID			lpData,
	BOOL			*pbCancel,
	DWORD			dwCopyFlags
	)
{
   NTSTATUS errCode;
   HANDLE FileHandleSource, FileHandleDest;
   IO_STATUS_BLOCK IoStatusBlock;
   FILE_STANDARD_INFORMATION FileStandard;
   FILE_BASIC_INFORMATION FileBasic;
   BOOL RC = FALSE;
   BOOL KeepDestOnError = FALSE;
   DWORD SystemError;

   FileHandleSource = CreateFileW(lpExistingFileName,
				  GENERIC_READ,
				  FILE_SHARE_READ,
				  NULL,
				  OPEN_EXISTING,
				  FILE_ATTRIBUTE_NORMAL|FILE_FLAG_NO_BUFFERING,
				  NULL);
   if (INVALID_HANDLE_VALUE != FileHandleSource)
     {
	errCode = NtQueryInformationFile(FileHandleSource,
					 &IoStatusBlock,
					 &FileStandard,
					 sizeof(FILE_STANDARD_INFORMATION),
					 FileStandardInformation);
	if (!NT_SUCCESS(errCode))
	  {
	     DPRINT("Status 0x%08x obtaining FileStandardInformation for source\n", errCode);
	     SetLastErrorByStatus(errCode);
	  }
	else
	  {
	     errCode = NtQueryInformationFile(FileHandleSource,
	  				      &IoStatusBlock,&FileBasic,
					      sizeof(FILE_BASIC_INFORMATION),
					      FileBasicInformation);
	     if (!NT_SUCCESS(errCode))
	       {
		  DPRINT("Status 0x%08x obtaining FileBasicInformation for source\n", errCode);
		  SetLastErrorByStatus(errCode);
	       }
	     else
	       {
		  FileHandleDest = CreateFileW(lpNewFileName,
					       GENERIC_WRITE,
					       FILE_SHARE_WRITE,
					       NULL,
					       dwCopyFlags ? CREATE_NEW : CREATE_ALWAYS,
                                               FileBasic.FileAttributes,
					       NULL);
		  if (INVALID_HANDLE_VALUE != FileHandleDest)
		    {
		       errCode = CopyLoop(FileHandleSource,
					  FileHandleDest,
					  FileStandard.EndOfFile,
					  lpProgressRoutine,
					  lpData,
					  pbCancel,
					  &KeepDestOnError);
		       if (!NT_SUCCESS(errCode))
			 {
			    SetLastErrorByStatus(errCode);
			 }
		       else
			 {
                LARGE_INTEGER t;

			    t.QuadPart = FileBasic.LastWriteTime.QuadPart;
			    errCode = SetLastWriteTime(FileHandleDest, t);
			    if (!NT_SUCCESS(errCode))
			      {
				 SetLastErrorByStatus(errCode);
			      }
			    else
			      {
				 RC = TRUE;
			      }
			 }
		       NtClose(FileHandleDest);
		       if (! RC && ! KeepDestOnError)
			 {
			    SystemError = GetLastError();
			    SetFileAttributesW(lpNewFileName, FILE_ATTRIBUTE_NORMAL);
			    DeleteFileW(lpNewFileName);
			    SetLastError(SystemError);
			 }
		    }
		  else
		    {
		    DPRINT("Error %d during opening of dest file\n", GetLastError());
		    }
	       }
	  }
	NtClose(FileHandleSource);
     }
   else
     {
     DPRINT("Error %d during opening of source file\n", GetLastError());
     }

   return RC;
}


/*
 * @implemented
 */
BOOL
STDCALL
CopyFileExA (
	LPCSTR			lpExistingFileName,
	LPCSTR			lpNewFileName,
	LPPROGRESS_ROUTINE	lpProgressRoutine,
	LPVOID			lpData,
	BOOL			*pbCancel,
	DWORD			dwCopyFlags
	)
{
	PWCHAR ExistingFileNameW;
   PWCHAR NewFileNameW;
	BOOL Result;

   if (!(ExistingFileNameW = FilenameA2W(lpExistingFileName, FALSE)))
      return FALSE;

   if (!(NewFileNameW = FilenameA2W(lpNewFileName, TRUE)))
      return FALSE;

   Result = CopyFileExW (ExistingFileNameW ,
                         NewFileNameW ,
	                      lpProgressRoutine,
	                      lpData,
	                      pbCancel,
	                      dwCopyFlags);

	RtlFreeHeap (RtlGetProcessHeap (),
	             0,
                NewFileNameW);

	return Result;
}


/*
 * @implemented
 */
BOOL
STDCALL
CopyFileA (
	LPCSTR	lpExistingFileName,
	LPCSTR	lpNewFileName,
	BOOL	bFailIfExists
	)
{
	return CopyFileExA (lpExistingFileName,
	                    lpNewFileName,
	                    NULL,
	                    NULL,
	                    NULL,
	                    bFailIfExists);
}


/*
 * @implemented
 */
BOOL
STDCALL
CopyFileW (
	LPCWSTR	lpExistingFileName,
	LPCWSTR	lpNewFileName,
	BOOL	bFailIfExists
	)
{
	return CopyFileExW (lpExistingFileName,
	                    lpNewFileName,
	                    NULL,
	                    NULL,
	                    NULL,
	                    bFailIfExists);
}


/*
 * @implemented
 */
BOOL
STDCALL
PrivCopyFileExW (
	LPCWSTR			lpExistingFileName,
	LPCWSTR			lpNewFileName,
	LPPROGRESS_ROUTINE	lpProgressRoutine,
	LPVOID			lpData,
	BOOL			*pbCancel,
	DWORD			dwCopyFlags
	)
{
    UNIMPLEMENTED;
    return FALSE;
}

/* EOF */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲伊人伊色伊影伊综合网| 欧美成人伊人久久综合网| 亚洲综合清纯丝袜自拍| 日韩欧美精品在线视频| 不卡免费追剧大全电视剧网站| 亚洲欧洲综合另类在线| 精品久久国产老人久久综合| 色噜噜偷拍精品综合在线| 国产成人午夜99999| 午夜精品123| 亚洲成av人片在线观看无码| 中文在线资源观看网站视频免费不卡| 欧美日韩国产a| 成人黄色在线看| 精品一区二区三区在线视频| 亚洲精品中文字幕乱码三区| 久久青草欧美一区二区三区| 欧美在线你懂得| 91色|porny| 91成人网在线| 91丝袜美腿高跟国产极品老师| 国产69精品久久久久毛片| 久久99国产精品成人| 日韩在线观看一区二区| 亚洲一区二区三区在线播放| 国产精品初高中害羞小美女文| 久久男人中文字幕资源站| 久久久久久日产精品| 337p日本欧洲亚洲大胆色噜噜| 欧美日韩精品欧美日韩精品| 欧美亚洲高清一区二区三区不卡| 91美女视频网站| 97久久超碰国产精品电影| 高清不卡在线观看| 不卡一区在线观看| 色8久久人人97超碰香蕉987| 色老头久久综合| 欧美性受xxxx黑人xyx| 欧美日韩国产大片| 欧美一级片免费看| 精品国产一区二区三区四区四| 欧美日韩美少妇| 欧美精品一区二| 一区二区在线看| 视频一区国产视频| 国产精品综合av一区二区国产馆| 国产成人精品一区二区三区四区 | 精品美女一区二区| 国产精品视频一二三| 一区精品在线播放| 日本aⅴ精品一区二区三区| 精品一区二区三区视频| 91在线免费播放| 日韩免费观看高清完整版| 国产欧美1区2区3区| 日本不卡高清视频| 欧美综合色免费| 欧美国产精品一区| 韩国av一区二区三区四区| 在线一区二区三区四区| 国产午夜亚洲精品羞羞网站| 日韩中文欧美在线| 欧美日韩国产另类不卡| 亚洲桃色在线一区| 国产99久久久国产精品免费看| 91黄视频在线观看| 亚洲欧洲日韩在线| 国产 日韩 欧美大片| 日韩视频免费观看高清完整版 | 亚洲乱码国产乱码精品精98午夜| 精品在线你懂的| 日韩一级片网址| 亚洲成av人影院| 日本精品视频一区二区| 亚洲欧美一区二区久久| 99国内精品久久| 国产精品国产自产拍高清av王其 | 欧美日韩视频在线观看一区二区三区 | 欧美日韩高清一区二区三区| 亚洲狠狠爱一区二区三区| 色婷婷精品大视频在线蜜桃视频| 亚洲欧美综合网| 91日韩精品一区| 麻豆成人在线观看| 久久这里只有精品首页| 国产大陆a不卡| 自拍偷自拍亚洲精品播放| 欧美日韩一级片网站| 日韩精品视频网| 精品久久久久久久久久久久久久久 | 日韩电影在线一区二区三区| 91精品国产综合久久香蕉麻豆| 亚洲高清免费视频| 欧美xingq一区二区| 97se亚洲国产综合自在线| 亚洲成在人线在线播放| 久久一日本道色综合| 色悠久久久久综合欧美99| 日本成人在线视频网站| 久久久午夜精品理论片中文字幕| 9久草视频在线视频精品| 亚洲一区二区三区小说| 欧美成人高清电影在线| 成人黄色片在线观看| 日韩电影在线免费看| 国产精品乱子久久久久| 在线播放中文字幕一区| 成人免费黄色在线| 美腿丝袜亚洲三区| 一区二区成人在线| 欧美韩国日本一区| 精品粉嫩超白一线天av| 色婷婷av一区| aaa国产一区| 成人av综合一区| 国产成人精品在线看| 蜜臀久久久久久久| 亚洲一二三区不卡| 亚洲午夜电影在线观看| 亚洲美女屁股眼交3| 亚洲视频一区在线观看| 亚洲欧洲国产日本综合| 国产亚洲欧美色| 国产欧美视频在线观看| www日韩大片| 久久中文字幕电影| 国产亚洲福利社区一区| 久久综合999| 欧美激情一区二区三区蜜桃视频| 亚洲成人一区在线| 亚洲人成亚洲人成在线观看图片 | 国产麻豆精品95视频| 美女性感视频久久| 国产一区在线精品| 高清不卡一二三区| 一本到不卡免费一区二区| 欧美做爰猛烈大尺度电影无法无天| 欧美在线短视频| 欧美成人午夜电影| 国产精品进线69影院| 亚洲免费观看在线视频| 亚洲午夜久久久久中文字幕久| 东方aⅴ免费观看久久av| 91在线免费视频观看| 91久久香蕉国产日韩欧美9色| 欧美精品色一区二区三区| 26uuu亚洲婷婷狠狠天堂| √…a在线天堂一区| 天堂一区二区在线| 成人免费观看视频| 欧美裸体一区二区三区| 精品国产一区二区三区久久久蜜月 | 欧美日韩大陆在线| 国产欧美va欧美不卡在线| 亚洲一区二区三区四区的| 久久精品国产99国产| 色综合视频在线观看| 久久久久久久久久久电影| 亚洲自拍与偷拍| 国产成人av一区二区三区在线 | 精品美女一区二区| 午夜久久久久久久久久一区二区| 高清国产午夜精品久久久久久| 在线观看国产日韩| 亚洲婷婷综合久久一本伊一区| 久久99精品国产| 日韩精品一区在线观看| 日韩精品亚洲一区二区三区免费| 国产精品一区在线观看乱码| 欧美成人a∨高清免费观看| 五月婷婷久久丁香| 欧美日韩另类一区| 午夜久久福利影院| 欧洲精品中文字幕| 一区二区三区在线观看欧美| 成人av动漫在线| 亚洲乱码国产乱码精品精可以看 | 国产日韩欧美精品在线| 国产精品综合av一区二区国产馆| 日韩欧美在线综合网| 香蕉加勒比综合久久| 欧美三级视频在线| 亚洲自拍都市欧美小说| 欧美中文字幕亚洲一区二区va在线 | 图片区小说区国产精品视频| 欧美精品日韩一本| 久热成人在线视频| 亚洲国产精品成人综合| 色网综合在线观看| 一卡二卡三卡日韩欧美| 欧美日韩另类国产亚洲欧美一级| 日本成人在线一区| 国产精品天干天干在线综合| 色哟哟亚洲精品| 久久66热re国产| 国产欧美精品一区二区三区四区| 日本高清不卡视频| 国产制服丝袜一区| 五月天国产精品| 最新中文字幕一区二区三区 |