开发者

lockfile is not working

i have locked my file from 0 to 5 bytes, and i write some character byte by byte but it does not stop writing even if the file is locked, i dont know what is wrong, i have tried every type of flag in createFile function, but no success, please help.

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <strsafe.h>
#include <stdlib.h>

void __cdecl _tmain(int argc, TCHAR *argv[])
{
DWORD dwBytesWritten;
HANDLE hFile;
BOOL filesize= FALSE;
LARGE_INTEGER pl_int;
PLARGE_INTEGER pli_int = &pl_int;
char * Buffer = (char *)malloc (1);
Buffer[0]='0';
printf("Detect Lock Process Started\n");
hFile = CreateFile(argv[1],         // open One.txt
          GENERIC_WRITE|GENERIC_READ,             // open for reading
          FILE_SHARE_READ | FILE_SHARE_WRITE,           // do not share
          NULL,                     // no security
          OPEN_EXISTING,            // existing file only
          FILE_ATTRIBUTE_NORMAL,    // normal file
          NULL);                    // no attr. template

if (hFile == INVALID_HANDLE_VALUE)
{
   printf("Could not open %s\n",argv[1]); 
   return;
}
filesize = GetFileSizeEx(hFile, pli_int);

__int64 fsizes= (__int64)(pli_int->QuadPart);

if (filesize == FALSE)
    printf("Could not get file size\n");
else
    _tprintf(TEXT("%s (%d bytes) \n"), argv[1], fsizes);

bool lock = LockFile(hFile,5,0,10,0);
if (lock == FALSE)
    printf("lockfailed\n");
for(int x=0; x < fsizes; x++)
{
    if (!WriteFile(hFile,Buffer,1,&dwBytesWritten,NULL))
    //if (!ReadFile(hFile,Buffer,1,&dwBytesWritten,NULL))
    {
        printf("File Locked-could not Write file at byte %d\n",x);

    }
    else
        printf("File Written at byte %d\n",x);
}
free(Buffer);
CloseHandle(hFile);

}

THE MAIN PROCESS THAT CALLS THIS PROCESS IS BELOW, i didnt mention it earlier, sorry abt that.

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <strsafe.h>
#include <stdlib.h>

void DisplayError(LPTSTR lpszFunction);

void __cdecl _tmain(int argc, TCHAR *argv[])
{
HANDLE hFile;


if(argc < 4 || argc%2 != 0) //check if low count or odd count
{
    printf("Wrong set of parameters \n");
    printf("Parameters=>  <lockfile> <File Name> (<Lock region Start value> <Lock        reigion Stop value>......)\n");
    return;
}
if (argc > 12)
{
    printf("Too many arguments\n");
    return;
}
// Open the existing file.

hFile = CreateFile(argv[1],         // open One.txt
          GENERIC_READ,             // open for reading
          FILE_SHARE_READ | FILE_SHARE_WRITE,           // do not share
          NULL,                     // no security
          OPEN_EXISTING,            // existing file only
          FILE_ATTRIBUTE_NORMAL,    // normal file
          NULL);                    // no att开发者_高级运维r. template

if (hFile == INVALID_HANDLE_VALUE)
{
   printf("Could not open %s\n",argv[1]); 
   return;
}


int i=argc-2;
int count[10];
for (int j=0; j<i; j++)
{
    count[j]=_ttoi(argv[2+j]);
}


for(int z=0; z<i; z=z+2)
{
    if(!LockFile(hFile,count[z],0,count[z+1]-count[z],0))
        DisplayError(TEXT("LockFile"));
    else
        printf("file locked from %d to %d bytes\n",count[z],count[z+1]);
} 
STARTUPINFO si;
PROCESS_INFORMATION pi;
printf("Calling Detect Lock\n");
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );

LPTSTR szCmdline = _tcsdup(TEXT("C:\\detectlock\\Debug\\detectlock.exe ass23.txt"));

if( !CreateProcess( NULL,   // No module name (use command line)
    szCmdline,        // Command line
    NULL,           // Process handle not inheritable
    NULL,           // Thread handle not inheritable
    FALSE,          // Set handle inheritance to FALSE
    0,              // No creation flags
    NULL,           // Use parent's environment block
    NULL,           // Use parent's starting directory 
    &si,            // Pointer to STARTUPINFO structure
    &pi )           // Pointer to PROCESS_INFORMATION structure
) 
{
    printf( "CreateProcess failed (%d)\n", GetLastError() );
    return;
}

// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );

// Close process and thread handles. 
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
CloseHandle(hFile);
//CloseHandle(hAppend);



}


From the MSDN article for LockFile():

Locks the specified file for exclusive access by the calling process.

Well, that surely worked. Your test is not verifying if another process is locked out of the file.


Locking the file does not prevent the lock holder from writing: the purpose of the lock is to prevent other processes accessing the locked portion.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜