// 设置文件的size.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "windows.h"
#include <iostream>
using namespace std;
int main()
{
LONG liNewPointer = 0;
DWORD dwRet = 0;
DWORD dwStPg = SetPrivilege(SE_MANAGE_VOLUME_NAME, TRUE);
if (dwStPg != ERROR_SUCCESS)
{
cout << "SetPrivilege GetLastError : " << GetLastError() << endl;
return 4;
}
HANDLE hFile = CreateFile("C://111.txt",
GENERIC_WRITE,
NULL,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
dwRet = GetLastError();
cout << "1 : " << dwRet << endl;
return 1;
}
if (!SetFilePointer(hFile, 1024 * 1024, &liNewPointer, FILE_BEGIN))
{
dwRet = GetLastError();
cout << "2 : " << dwRet << endl;
return 2;
}
if (!SetEndOfFile(hFile))
{
dwRet = GetLastError();
cout << "3 : " << dwRet << endl;
return 3;
}
if (!SetFileValidData(hFile, 1024 * 1024))
{
cout << "SetFileValidData failed! lasterror=" << GetLastError() << endl;
}
CloseHandle(hFile);
return 0;
}
创建文件的时候加上 FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING那么writefile会报参数,
而异步写是需这样的flag的,可能解决办法:先closehandle,再打开文件writefile
int main()
{
DWORD dwStPg = SetPrivilege(SE_MANAGE_VOLUME_NAME, TRUE);
if (dwStPg != ERROR_SUCCESS)
{
cout << "SetPrivilege GetLastError : " << GetLastError() << endl;
return 4;
}
HANDLE hfile1 = CreateFile("C://filesz.txt", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL/* | FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING*/, NULL);
if (INVALID_HANDLE_VALUE == hfile1)
{
cout << "createfile" << endl;
return 1;
}
DWORD dwRetn = SetFilePointer(hfile1, 1024l * 1024l * 2l, NULL, FILE_BEGIN);
if (INVALID_SET_FILE_POINTER == dwRetn)
{
cout << "SetFilePointer GetLastError : " << GetLastError() << endl;
CloseHandle(hfile1);
return 2;
}
BOOL bIsSed = SetEndOfFile(hfile1);
if (!bIsSed)
{
cout << "SetEndOfFile GetlastError : " << GetLastError() << endl;
CloseHandle(hfile1);
return 3;
}
SetFilePointer(hfile1, 0, NULL, FILE_BEGIN);
DWORD dwWted = 0;
char szbuff[7] = "okokok";
if (!WriteFile(hfile1, szbuff, 6, &dwWted, NULL))
{
cout << "writefile GetlastError : " << GetLastError() << endl;
return 6;
}
BOOL bIsSet = SetFileValidData(hfile1,6);
if(!bIsSet)
{
cout << "SetFileValidData GetlastError : " << GetLastError() << endl;
CloseHandle(hfile1);
return 5;
}
bIsSed = SetEndOfFile(hfile1);
if (!bIsSed)
{
cout << "SetEndOfFile GetlastError : " << GetLastError() << endl;
CloseHandle(hfile1);
return 3;
}
CloseHandle(hfile1);
return 0;
}
DWORD SetPrivilege(
LPCTSTR lpszPrivilege, // name of privilege to enable/disable
BOOL bEnablePrivilege // to enable or disable privilege
)
{
HANDLE hToken = NULL;
TOKEN_PRIVILEGES tp;
LUID luid;
BOOL bRet;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_READ | TOKEN_WRITE, &hToken))
{
// cerr << "OpenProcessToken failed! LastError=" << GetLastError() << endl;
return GetLastError();
}
if ( !LookupPrivilegeValue(
NULL, // lookup privilege on local system
lpszPrivilege, // privilege to lookup
&luid ) )
{
CloseHandle(hToken);
return GetLastError();
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
if (bEnablePrivilege)
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
tp.Privileges[0].Attributes = 0;
// Enable the privilege or disable all privileges.
bRet = AdjustTokenPrivileges(
hToken,
FALSE,
&tp,
sizeof(TOKEN_PRIVILEGES),
(PTOKEN_PRIVILEGES) NULL,
(PDWORD) NULL);
// Call GetLastError to determine whether the function succeeded.
if (!bRet)
{
::CloseHandle(hToken);
return GetLastError();
}
::CloseHandle(hToken);
return ERROR_SUCCESS;
}
//
#include "stdafx.h"
#include "windows.h"
#include <iostream>
using namespace std;
int main()
{
LONG liNewPointer = 0;
DWORD dwRet = 0;
DWORD dwStPg = SetPrivilege(SE_MANAGE_VOLUME_NAME, TRUE);
if (dwStPg != ERROR_SUCCESS)
{
cout << "SetPrivilege GetLastError : " << GetLastError() << endl;
return 4;
}
HANDLE hFile = CreateFile("C://111.txt",
GENERIC_WRITE,
NULL,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
dwRet = GetLastError();
cout << "1 : " << dwRet << endl;
return 1;
}
if (!SetFilePointer(hFile, 1024 * 1024, &liNewPointer, FILE_BEGIN))
{
dwRet = GetLastError();
cout << "2 : " << dwRet << endl;
return 2;
}
if (!SetEndOfFile(hFile))
{
dwRet = GetLastError();
cout << "3 : " << dwRet << endl;
return 3;
}
if (!SetFileValidData(hFile, 1024 * 1024))
{
cout << "SetFileValidData failed! lasterror=" << GetLastError() << endl;
}
CloseHandle(hFile);
return 0;
}
创建文件的时候加上 FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING那么writefile会报参数,
而异步写是需这样的flag的,可能解决办法:先closehandle,再打开文件writefile
int main()
{
DWORD dwStPg = SetPrivilege(SE_MANAGE_VOLUME_NAME, TRUE);
if (dwStPg != ERROR_SUCCESS)
{
cout << "SetPrivilege GetLastError : " << GetLastError() << endl;
return 4;
}
HANDLE hfile1 = CreateFile("C://filesz.txt", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL/* | FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING*/, NULL);
if (INVALID_HANDLE_VALUE == hfile1)
{
cout << "createfile" << endl;
return 1;
}
DWORD dwRetn = SetFilePointer(hfile1, 1024l * 1024l * 2l, NULL, FILE_BEGIN);
if (INVALID_SET_FILE_POINTER == dwRetn)
{
cout << "SetFilePointer GetLastError : " << GetLastError() << endl;
CloseHandle(hfile1);
return 2;
}
BOOL bIsSed = SetEndOfFile(hfile1);
if (!bIsSed)
{
cout << "SetEndOfFile GetlastError : " << GetLastError() << endl;
CloseHandle(hfile1);
return 3;
}
SetFilePointer(hfile1, 0, NULL, FILE_BEGIN);
DWORD dwWted = 0;
char szbuff[7] = "okokok";
if (!WriteFile(hfile1, szbuff, 6, &dwWted, NULL))
{
cout << "writefile GetlastError : " << GetLastError() << endl;
return 6;
}
BOOL bIsSet = SetFileValidData(hfile1,6);
if(!bIsSet)
{
cout << "SetFileValidData GetlastError : " << GetLastError() << endl;
CloseHandle(hfile1);
return 5;
}
bIsSed = SetEndOfFile(hfile1);
if (!bIsSed)
{
cout << "SetEndOfFile GetlastError : " << GetLastError() << endl;
CloseHandle(hfile1);
return 3;
}
CloseHandle(hfile1);
return 0;
}
DWORD SetPrivilege(
LPCTSTR lpszPrivilege, // name of privilege to enable/disable
BOOL bEnablePrivilege // to enable or disable privilege
)
{
HANDLE hToken = NULL;
TOKEN_PRIVILEGES tp;
LUID luid;
BOOL bRet;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_READ | TOKEN_WRITE, &hToken))
{
// cerr << "OpenProcessToken failed! LastError=" << GetLastError() << endl;
return GetLastError();
}
if ( !LookupPrivilegeValue(
NULL, // lookup privilege on local system
lpszPrivilege, // privilege to lookup
&luid ) )
{
CloseHandle(hToken);
return GetLastError();
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
if (bEnablePrivilege)
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
tp.Privileges[0].Attributes = 0;
// Enable the privilege or disable all privileges.
bRet = AdjustTokenPrivileges(
hToken,
FALSE,
&tp,
sizeof(TOKEN_PRIVILEGES),
(PTOKEN_PRIVILEGES) NULL,
(PDWORD) NULL);
// Call GetLastError to determine whether the function succeeded.
if (!bRet)
{
::CloseHandle(hToken);
return GetLastError();
}
::CloseHandle(hToken);
return ERROR_SUCCESS;
}