15 #define MAX_ERROR_MESSAGE_SIZE 1024 18 static WCHAR*
filterMask = L
"c:\\filterTest\\*";
19 static WCHAR*
testFile = L
"c:\\filterTest\\myTestFile.txt";
20 static WCHAR* reparseFolder = L
"c:\\reparse";
21 static WCHAR* reparseMask = L
"c:\\reparse\\*";
22 static WCHAR* reparseFile = L
"c:\\reparse\\myTestFile.txt";
23 static CHAR* testData =
"EaseFilter Test Data for read/write,This is the original data when we setup a new test file.\n For callback filter read/write test,It will modify this data";
24 static CHAR* replaceData =
"This replace data test,it is not in the file.It will replace/merge the original data";
25 static CHAR* reparseData =
"EaseFilter Test Data for reparse open,this is the data from reparse file open.";
26 static LONGLONG testFileSize = 2147483648;
96 st.wMilliseconds = 11;
98 SystemTimeToFileTime(&st,&fileTime);
101 large.LowPart=fileTime.dwLowDateTime;
102 large.HighPart=fileTime.dwHighDateTime;
110 LARGE_INTEGER ByteOffset = {0};
111 OVERLAPPED Overlapped = {0};
112 DWORD dwTransferred = 0;
114 int nError = ERROR_SUCCESS;
118 ret = CreateDirectory(folder,NULL);
122 nError = GetLastError();
123 if( nError != ERROR_ALREADY_EXISTS )
131 SetFileAttributes(fileName,FILE_ATTRIBUTE_NORMAL);
134 HANDLE pFile = CreateFile(fileName,GENERIC_WRITE,NULL,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
136 if( pFile == INVALID_HANDLE_VALUE )
142 Length = (DWORD)strlen(data);
145 if(!WriteFile(pFile, data, Length, &dwTransferred, NULL))
147 nError = GetLastError();
184 HANDLE pFile = INVALID_HANDLE_VALUE;
185 ULONG accessFlag = 0;
197 pFile = CreateFile(
testFile,GENERIC_WRITE,NULL,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
198 if( INVALID_HANDLE_VALUE != pFile )
206 dwError = GetLastError();
208 if( ERROR_ACCESS_DENIED != dwError )
219 if(!RemoveBlockSaveAsProcessId(GetCurrentProcessId()))
231 pFile = CreateFile(
testFile,ACCESS_SYSTEM_SECURITY,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
232 if( INVALID_HANDLE_VALUE != pFile )
240 dwError = GetLastError();
242 if( ERROR_ACCESS_DENIED != dwError )
244 PrintErrorMessage(L
"ALLOW_OPEN_WTIH_ACCESS_SYSTEM_SECURITY test failed.",dwError);
258 pFile = CreateFile(
testFile,GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
259 if( INVALID_HANDLE_VALUE != pFile )
267 dwError = GetLastError();
269 if( ERROR_ACCESS_DENIED != dwError )
283 pFile = CreateFile(
testFile,GENERIC_WRITE,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
284 if( INVALID_HANDLE_VALUE != pFile )
292 dwError = GetLastError();
294 if( ERROR_ACCESS_DENIED != dwError )
308 pFile = CreateFile(
testFile,GENERIC_WRITE,NULL,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
309 if( INVALID_HANDLE_VALUE != pFile )
311 PrintErrorMessage(L
"ALLOW_OPEN_WITH_CREATE_OR_OVERWRITE_EXIST_FILE test failed.",0);
317 dwError = GetLastError();
319 if( ERROR_ACCESS_DENIED != dwError )
321 PrintErrorMessage(L
"ALLOW_OPEN_WITH_CREATE_OR_OVERWRITE_EXIST_FILE test failed.",dwError);
335 pFile = CreateFile(
testFile,DELETE,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
336 if( INVALID_HANDLE_VALUE != pFile )
344 dwError = GetLastError();
346 if( ERROR_ACCESS_DENIED != dwError )
361 pFile = CreateFile(
testFile,GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
362 if( INVALID_HANDLE_VALUE == pFile )
369 ret = ReadFile(pFile,buffer,bufferLength,&bufferLength,NULL);
377 dwError = GetLastError();
379 if( ERROR_ACCESS_DENIED != dwError )
394 pFile = CreateFile(
testFile,GENERIC_WRITE,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
395 if( INVALID_HANDLE_VALUE == pFile )
403 ret = WriteFile(pFile,buffer,bufferLength,&bufferLength,NULL);
411 dwError = GetLastError();
413 if( ERROR_ACCESS_DENIED != dwError )
428 pFile = CreateFile(
testFile,GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
429 if( INVALID_HANDLE_VALUE == pFile )
431 PrintErrorMessage(L
"Open test file for query information failed.",GetLastError());
436 BY_HANDLE_FILE_INFORMATION fileInfo;
437 ret = GetFileInformationByHandle(pFile,&fileInfo);
445 dwError = GetLastError();
447 if( ERROR_ACCESS_DENIED != dwError )
464 pFile = CreateFile(
testFile,GENERIC_ALL,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
465 if( INVALID_HANDLE_VALUE == pFile )
476 ret = SetFileAttributes(
testFile,FILE_ATTRIBUTE_READONLY);
484 dwError = GetLastError();
486 if( ERROR_ACCESS_DENIED != dwError )
501 ret = MoveFile (
testFile,L
"c:\\TestMoveFileNameFile.txt");
509 dwError = GetLastError();
511 if( ERROR_ACCESS_DENIED != dwError )
533 dwError = GetLastError();
535 if( ERROR_ACCESS_DENIED != dwError )
549 pFile = CreateFile(
testFile,GENERIC_ALL,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
550 if( INVALID_HANDLE_VALUE == pFile )
552 PrintErrorMessage(L
"Open test file for file size change failed.",GetLastError());
557 DWORD newPointer = SetFilePointer(pFile,65536,NULL,FILE_BEGIN);
559 if( INVALID_SET_FILE_POINTER == newPointer)
565 ret = SetEndOfFile(pFile);
574 dwError = GetLastError();
576 if( ERROR_ACCESS_DENIED != dwError )
593 BYTE SecDescBuff[0x4000];
594 DWORD cbSD =
sizeof(SecDescBuff);
596 ret = GetFileSecurity(
testFile, DACL_SECURITY_INFORMATION, SecDescBuff, cbSD, &cbSD);
604 dwError = GetLastError();
606 if( ERROR_ACCESS_DENIED != dwError )
622 cbSD =
sizeof(SecDescBuff);
624 ret = GetFileSecurity(
testFile, GROUP_SECURITY_INFORMATION, SecDescBuff, cbSD, &cbSD);
627 PrintErrorMessage(L
"ALLOW_SET_SECURITY_ACCESS GetFileSecurity failed.",GetLastError());
631 ret = SetFileSecurity(
testFile, GROUP_SECURITY_INFORMATION, SecDescBuff);
640 dwError = GetLastError();
642 if( ERROR_ACCESS_DENIED != dwError )
658 WIN32_FIND_DATA findFileData;
659 pFile = FindFirstFile(
filterMask, &findFileData);
661 if(INVALID_HANDLE_VALUE != pFile)
665 printf(
"handle:%p file:%d ",pFile,findFileData.dwFileAttributes);
667 pFile = INVALID_HANDLE_VALUE;
672 dwError = GetLastError();
674 if( ERROR_ACCESS_DENIED != dwError )
695 AddExcludeFileMaskToFilterRule(
filterMask,L
"*mytestFile.txt");
697 pFile = CreateFile(
testFile,GENERIC_ALL,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
698 if( INVALID_HANDLE_VALUE == pFile )
706 ret = SetFileAttributes(
testFile,FILE_ATTRIBUTE_READONLY);
717 pFile = INVALID_HANDLE_VALUE;
735 if( INVALID_HANDLE_VALUE != pFile )
756 if(!AddReparseFileMaskToFilterRule(
filterMask,reparseMask) )
763 HANDLE pFile = CreateFile(
testFile,GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
772 CHAR* buffer = (CHAR*)malloc( bufferLength );
776 PrintErrorMessage(L
"Reparse filter rule test failed.Can't allocate memory for test.",0);
780 ret = ReadFile(pFile,buffer,bufferLength,&bufferLength,NULL);
788 if( memcmp(buffer,reparseData,bufferLength) == 0)
794 PrintErrorMessage(L
"The file open didnt reparse to the new file.",GetLastError());
795 printf(
"ReparseData:%s\n\n",reparseData);
796 printf(
"DataReturn:%s\n\n",buffer);
831 RegisterIoRequest(requestRegistration);
833 HANDLE pFile = CreateFile(
testFile,GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
834 if( INVALID_HANDLE_VALUE == pFile )
842 CHAR* buffer = (CHAR*)malloc( bufferLength );
850 ret = ReadFile(pFile,buffer,bufferLength,&bufferLength,NULL);
858 if( memcmp(buffer,replaceData,bufferLength) == 0)
870 printf(
"Read return data:\r\n%s\r\n\r\n",buffer);
871 printf(
"Replace data:\r\n%s\r\n\r\n",replaceData);
913 if(!RegisterIoRequest(requestRegistration))
919 HANDLE pFile = CreateFile(
testFile,GENERIC_ALL,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
920 if( INVALID_HANDLE_VALUE == pFile )
927 CHAR* buffer =
"Test write data to my file,it will replace the test data in pre-write call back test function.";
930 ret = WriteFile(pFile,buffer,bufferLength,&bufferLength,NULL);
938 ULONG replaceDataLength = (ULONG)strlen(replaceData);
939 CHAR* replaceDataBuffer = (CHAR*)malloc( replaceDataLength );
941 if(NULL == replaceDataBuffer)
949 SetFilePointer(pFile,0,NULL,FILE_BEGIN);
950 ret = ReadFile(pFile,replaceDataBuffer,replaceDataLength,&replaceDataLength,NULL);
958 if( memcmp(replaceDataBuffer,replaceData,replaceDataLength) == 0)
969 printf(
"Write Test Failed.\nDataFromFile:%s \n CorrectData:%s\n",replaceDataBuffer,replaceData);
1004 RegisterIoRequest(requestRegistration);
1006 HANDLE pFile = CreateFile(
testFile,GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
1007 if( INVALID_HANDLE_VALUE == pFile )
1014 FILETIME creationTime;
1015 FILETIME lastAccessTime;
1016 FILETIME lastWriteTime;
1018 ret = GetFileTime(pFile,&creationTime,&lastAccessTime,&lastWriteTime );
1022 PrintErrorMessage(L
"QueryInformationControlTest GetFileInformationByHandle failed.",GetLastError());
1029 if( writeTime.HighPart != lastWriteTime.dwHighDateTime || writeTime.LowPart != lastWriteTime.dwLowDateTime )
1032 PrintErrorMessage(L
"QueryInformationControlTest failed. Return last write time is not correct", 0 );
1068 RegisterIoRequest(requestRegistration);
1074 ret = SetFileAttributes(
testFile,FILE_ATTRIBUTE_NORMAL);
1078 PrintErrorMessage(L
"SetInformationControlTest SetFileAttributes failed.",GetLastError());
1082 ULONG attributes = GetFileAttributes(
testFile);
1084 if( INVALID_FILE_ATTRIBUTES == attributes )
1086 PrintErrorMessage(L
"SetInformationControlTest GetFileAttributes failed.",GetLastError());
1090 if( attributes & FILE_ATTRIBUTE_READONLY )
1113 RegisterIoRequest(requestRegistration);
1115 WIN32_FIND_DATA ffd;
1116 HANDLE pFile = FindFirstFile(
filterMask, &ffd);
1120 if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
1122 printf(
" %ws <DIR>\n", ffd.cFileName);
1126 LARGE_INTEGER filesize;
1127 filesize.LowPart = ffd.nFileSizeLow;
1128 filesize.HighPart = ffd.nFileSizeHigh;
1129 printf(
" %ws %I64d bytes\n", ffd.cFileName, filesize.QuadPart);
1133 PrintErrorMessage(L
"Browse directory failed.Return file size is not the same as test file size.",0);
1139 while (FindNextFile(pFile, &ffd) != 0);
1141 if( INVALID_HANDLE_VALUE != pFile )
1146 DWORD dwError = GetLastError();
1147 if (dwError != ERROR_NO_MORE_FILES)
1172 ULONG currentPid = GetCurrentProcessId();
1174 AddIncludeProcessIdToFilterRule(
filterMask,currentPid);
1176 HANDLE pFile = CreateFile(
testFile,GENERIC_WRITE,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
1177 if( INVALID_HANDLE_VALUE != pFile )
1184 DWORD dwError = GetLastError();
1186 if( ERROR_ACCESS_DENIED != dwError )
1202 BOOLEAN ret = FALSE;
1212 if( 0 == GetUserName(userName,&userNameSize) )
1218 AddIncludeUserNameToFilterRule(
filterMask,userName);
1220 HANDLE pFile = CreateFile(
testFile,GENERIC_WRITE,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
1221 if( INVALID_HANDLE_VALUE != pFile )
1229 DWORD dwError = GetLastError();
1231 if( ERROR_ACCESS_DENIED != dwError )
1259 SetConnectionTimeout(30);
BOOL SetupTestEnvironment()
BOOL ReparseFilterRuleTest()
BOOL QueryInformationControlTest()
BOOLEAN IncludeExcludeUserNameTest()
WCHAR * GetTestReparseFileName()
BOOL SetInformationControlTest()
BOOL IsTestFolder(WCHAR *fileName)
BOOL IsTestFile(WCHAR *fileName, ULONG fileNameLength)
LONGLONG GetTestFileSize()
BOOL WriteControlFilterTest()
LARGE_INTEGER GetTestFileTime()
BOOL AccessFlagControlTest()
void ControlFilterUnitTest()
BOOL IncludeExcludeProcessNameTest()
BOOL CreateTestFile(WCHAR *folder, WCHAR *fileName, CHAR *data)
BOOL ReadControlFilterTest()
BOOL BrowseDirectoryControlTest()