filewipe.cpp

来自「一个实现文件加密的源码」· C++ 代码 · 共 67 行

CPP
67
字号
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///[FileWipe - HDD File Wiping class]///////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// This class is for securly remove file from the hard drive.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Written by Nir Dremer
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include <windows.h>
#include <stdlib.h>
#include <time.h>
#include "filewipe.h"

namespace GenLib
{

bool FileWipe::wipeFile(const char *filename)
{
	// FILE_FLAG_WRITE_THROUGH - writing directly to disk (not using cache).
	HANDLE hFile = CreateFile(filename, GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, 
							NULL, OPEN_ALWAYS, FILE_FLAG_WRITE_THROUGH, NULL);
	if (hFile == INVALID_HANDLE_VALUE) return false;

	DWORD fileSize = GetFileSize(hFile, 0);
	// if file is empty.
	if (!fileSize)
	{
		CloseHandle(hFile);
		return false;
	}

	for (int passes = 0; passes < OVERWRITE_PASSES; passes++)
	{
		char newStorage[BUFFER_SIZE];
		srand((unsigned)time(NULL));
		FillMemory((void*)newStorage, BUFFER_SIZE, rand() % 255);

		SetFilePointer(hFile, 0, NULL, FILE_BEGIN);

		DWORD left = fileSize;
		int write = BUFFER_SIZE;
		DWORD written = 0;
		while (left)
		{
			if (left < BUFFER_SIZE) write = left;

			BOOL status = WriteFile(hFile, newStorage, write, &written, NULL);
			if (!status)
			{
				CloseHandle(hFile);
				return false;
			}

			left -= write;
		}
	}

	CloseHandle(hFile);


	if (!DeleteFile(filename)) return false;

	return true;
}


};

⌨️ 快捷键说明

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