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;
192 pFile = CreateFile(
testFile,ACCESS_SYSTEM_SECURITY,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
193 if( INVALID_HANDLE_VALUE != pFile )
201 dwError = GetLastError();
203 if( ERROR_ACCESS_DENIED != dwError )
205 PrintErrorMessage(L
"ALLOW_OPEN_WTIH_ACCESS_SYSTEM_SECURITY test failed.",dwError);
219 pFile = CreateFile(
testFile,GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
220 if( INVALID_HANDLE_VALUE != pFile )
228 dwError = GetLastError();
230 if( ERROR_ACCESS_DENIED != dwError )
244 pFile = CreateFile(
testFile,GENERIC_WRITE,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
245 if( INVALID_HANDLE_VALUE != pFile )
253 dwError = GetLastError();
255 if( ERROR_ACCESS_DENIED != dwError )
269 pFile = CreateFile(
testFile,GENERIC_WRITE,NULL,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
270 if( INVALID_HANDLE_VALUE != pFile )
272 PrintErrorMessage(L
"ALLOW_OPEN_WITH_CREATE_OR_OVERWRITE_EXIST_FILE test failed.",0);
278 dwError = GetLastError();
280 if( ERROR_ACCESS_DENIED != dwError )
282 PrintErrorMessage(L
"ALLOW_OPEN_WITH_CREATE_OR_OVERWRITE_EXIST_FILE test failed.",dwError);
296 pFile = CreateFile(
testFile,DELETE,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
297 if( INVALID_HANDLE_VALUE != pFile )
305 dwError = GetLastError();
307 if( ERROR_ACCESS_DENIED != dwError )
322 pFile = CreateFile(
testFile,GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
323 if( INVALID_HANDLE_VALUE == pFile )
330 ret = ReadFile(pFile,buffer,bufferLength,&bufferLength,NULL);
338 dwError = GetLastError();
340 if( ERROR_ACCESS_DENIED != dwError )
355 pFile = CreateFile(
testFile,GENERIC_WRITE,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
356 if( INVALID_HANDLE_VALUE == pFile )
364 ret = WriteFile(pFile,buffer,bufferLength,&bufferLength,NULL);
372 dwError = GetLastError();
374 if( ERROR_ACCESS_DENIED != dwError )
389 pFile = CreateFile(
testFile,GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
390 if( INVALID_HANDLE_VALUE == pFile )
392 PrintErrorMessage(L
"Open test file for query information failed.",GetLastError());
397 BY_HANDLE_FILE_INFORMATION fileInfo;
398 ret = GetFileInformationByHandle(pFile,&fileInfo);
406 dwError = GetLastError();
408 if( ERROR_ACCESS_DENIED != dwError )
425 pFile = CreateFile(
testFile,GENERIC_ALL,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
426 if( INVALID_HANDLE_VALUE == pFile )
437 ret = SetFileAttributes(
testFile,FILE_ATTRIBUTE_READONLY);
445 dwError = GetLastError();
447 if( ERROR_ACCESS_DENIED != dwError )
462 ret = MoveFile (
testFile,L
"c:\\TestMoveFileNameFile.txt");
470 dwError = GetLastError();
472 if( ERROR_ACCESS_DENIED != dwError )
494 dwError = GetLastError();
496 if( ERROR_ACCESS_DENIED != dwError )
510 pFile = CreateFile(
testFile,GENERIC_ALL,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
511 if( INVALID_HANDLE_VALUE == pFile )
513 PrintErrorMessage(L
"Open test file for file size change failed.",GetLastError());
518 DWORD newPointer = SetFilePointer(pFile,65536,NULL,FILE_BEGIN);
520 if( INVALID_SET_FILE_POINTER == newPointer)
526 ret = SetEndOfFile(pFile);
535 dwError = GetLastError();
537 if( ERROR_ACCESS_DENIED != dwError )
554 BYTE SecDescBuff[0x4000];
555 DWORD cbSD =
sizeof(SecDescBuff);
557 ret = GetFileSecurity(
testFile, DACL_SECURITY_INFORMATION, SecDescBuff, cbSD, &cbSD);
565 dwError = GetLastError();
567 if( ERROR_ACCESS_DENIED != dwError )
583 cbSD =
sizeof(SecDescBuff);
585 ret = GetFileSecurity(
testFile, GROUP_SECURITY_INFORMATION, SecDescBuff, cbSD, &cbSD);
588 PrintErrorMessage(L
"ALLOW_SET_SECURITY_ACCESS GetFileSecurity failed.",GetLastError());
592 ret = SetFileSecurity(
testFile, GROUP_SECURITY_INFORMATION, SecDescBuff);
601 dwError = GetLastError();
603 if( ERROR_ACCESS_DENIED != dwError )
619 WIN32_FIND_DATA findFileData;
620 pFile = FindFirstFile(
filterMask, &findFileData);
622 if(INVALID_HANDLE_VALUE != pFile)
626 printf(
"handle:%p file:%d ",pFile,findFileData.dwFileAttributes);
628 pFile = INVALID_HANDLE_VALUE;
633 dwError = GetLastError();
635 if( ERROR_ACCESS_DENIED != dwError )
655 AddFilterRule(accessFlag,
filterMask,L
"*mytestFile.txt");
657 pFile = CreateFile(
testFile,GENERIC_ALL,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
658 if( INVALID_HANDLE_VALUE == pFile )
666 ret = SetFileAttributes(
testFile,FILE_ATTRIBUTE_READONLY);
677 pFile = INVALID_HANDLE_VALUE;
695 if( INVALID_HANDLE_VALUE != pFile )
709 AddFilterRule(accessFlag,
filterMask,reparseMask);
712 HANDLE pFile = CreateFile(
testFile,GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
721 CHAR* buffer = (CHAR*)malloc( bufferLength );
725 PrintErrorMessage(L
"Reparse filter rule test failed.Can't allocate memory for test.",0);
729 ret = ReadFile(pFile,buffer,bufferLength,&bufferLength,NULL);
737 if( memcmp(buffer,reparseData,bufferLength) == 0)
743 PrintErrorMessage(L
"The file open didnt reparse to the new file.",GetLastError());
744 printf(
"ReparseData:%s\n\n",reparseData);
745 printf(
"DataReturn:%s\n\n",buffer);
780 RegisterIoRequest(requestRegistration);
782 HANDLE pFile = CreateFile(
testFile,GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
783 if( INVALID_HANDLE_VALUE == pFile )
791 CHAR* buffer = (CHAR*)malloc( bufferLength );
799 ret = ReadFile(pFile,buffer,bufferLength,&bufferLength,NULL);
807 if( memcmp(buffer,replaceData,bufferLength) == 0)
819 printf(
"Read return data:\r\n%s\r\n\r\n",buffer);
820 printf(
"Replace data:\r\n%s\r\n\r\n",replaceData);
857 RegisterIoRequest(requestRegistration);
859 HANDLE pFile = CreateFile(
testFile,GENERIC_ALL,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
860 if( INVALID_HANDLE_VALUE == pFile )
867 CHAR* buffer =
"Test write data to my file,it will replace the test data in pre-write call back test function.";
870 ret = WriteFile(pFile,buffer,bufferLength,&bufferLength,NULL);
878 ULONG replaceDataLength = (ULONG)strlen(replaceData);
879 CHAR* replaceDataBuffer = (CHAR*)malloc( replaceDataLength );
881 if(NULL == replaceDataBuffer)
889 SetFilePointer(pFile,0,NULL,FILE_BEGIN);
890 ret = ReadFile(pFile,replaceDataBuffer,replaceDataLength,&replaceDataLength,NULL);
898 if( memcmp(replaceDataBuffer,replaceData,replaceDataLength) == 0)
909 printf(
"Write Test Failed.\nDataFromFile:%s \n CorrectData:%s\n",replaceDataBuffer,replaceData);
944 RegisterIoRequest(requestRegistration);
946 HANDLE pFile = CreateFile(
testFile,GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
947 if( INVALID_HANDLE_VALUE == pFile )
954 FILETIME creationTime;
955 FILETIME lastAccessTime;
956 FILETIME lastWriteTime;
958 ret = GetFileTime(pFile,&creationTime,&lastAccessTime,&lastWriteTime );
962 PrintErrorMessage(L
"QueryInformationControlDemo GetFileInformationByHandle failed.",GetLastError());
969 if( writeTime.HighPart != lastWriteTime.dwHighDateTime || writeTime.LowPart != lastWriteTime.dwLowDateTime )
972 PrintErrorMessage(L
"QueryInformationControlDemo failed. Return last write time is not correct", 0 );
1008 RegisterIoRequest(requestRegistration);
1014 ret = SetFileAttributes(
testFile,FILE_ATTRIBUTE_NORMAL);
1018 PrintErrorMessage(L
"SetInformationControlDemo SetFileAttributes failed.",GetLastError());
1022 ULONG attributes = GetFileAttributes(
testFile);
1024 if( INVALID_FILE_ATTRIBUTES == attributes )
1026 PrintErrorMessage(L
"SetInformationControlDemo GetFileAttributes failed.",GetLastError());
1030 if( attributes & FILE_ATTRIBUTE_READONLY )
1053 RegisterIoRequest(requestRegistration);
1055 WIN32_FIND_DATA ffd;
1056 HANDLE pFile = FindFirstFile(
filterMask, &ffd);
1060 if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
1062 printf(
" %ws <DIR>\n", ffd.cFileName);
1066 LARGE_INTEGER filesize;
1067 filesize.LowPart = ffd.nFileSizeLow;
1068 filesize.HighPart = ffd.nFileSizeHigh;
1069 printf(
" %ws %I64d bytes\n", ffd.cFileName, filesize.QuadPart);
1073 PrintErrorMessage(L
"Browse directory failed.Return file size is not the same as test file size.",0);
1079 while (FindNextFile(pFile, &ffd) != 0);
1081 if( INVALID_HANDLE_VALUE != pFile )
1086 DWORD dwError = GetLastError();
1087 if (dwError != ERROR_NO_MORE_FILES)
1115 SetConnectionTimeout(30);
BOOL SetupTestEnvironment()
BOOL SetInformationControlDemo()
BOOL ReparseFilterRuleDemo()
BOOL IsTestFolder(WCHAR *fileName)
BOOL CreateTestFile(WCHAR *folder, WCHAR *fileName, CHAR *data)
BOOL IsTestFile(WCHAR *fileName, ULONG fileNameLength)
BOOL WriteControlFilterDemo()
LARGE_INTEGER GetTestFileTime()
LONGLONG GetTestFileSize()
BOOL ReadControlFilterDemo()
BOOL BrowseDirectoryControlDemo()
WCHAR * GetTestReparseFileName()
BOOL AccessFlagControlDemo()
BOOL QueryInformationControlDemo()