🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: borland.public.cppbuilder.nativeapi
Article #6842

ReadDirectoryChangesW - Access Violation

#6842
From: Zoetjuh
Date: Tue, 05 Apr 2005 21:34
87 lines
3704 bytes
Hello everyone,

I've got a slight problem with reading the FileName after the Overlapped Event 
on ReadDirectoryChangesW. With my following code, I'm getting an Access 
Violation error; now I'm not sure what buffersize to use, but this one seems to 
suffice:

Hoping someone can help me out.

Kind regards,
Peter Elbertse


// Set handles:
HANDLE hDir = CreateFile (fInternalDirectory.c_str(), FILE_LIST_DIRECTORY, 
FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, 
FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, NULL);

// Check if the Dir Handle is OK:
if (hDir != INVALID_HANDLE_VALUE)
{
    // Set vars:
    FILE_NOTIFY_INFORMATION *ChangesBuffer = new FILE_NOTIFY_INFORMATION();

    DWORD BufferLength = 0;
    HANDLE myServiceWatch = CreateEvent(NULL, FALSE, FALSE, NULL);
    DWORD ChangesMaxBuffer = sizeof(FILE_NOTIFY_INFORMATION) + MAX_PATH;

    // Set Overlapped:
    OVERLAPPED Overlapped;
    ZeroMemory(&Overlapped, sizeof(Overlapped));
    Overlapped.hEvent = myServiceWatch;

    // Outer try:
    try
    {
        // fetch and process commands until the connection or thread is 
terminated
        while (!Terminated)
        {
            // Update Notifier Listener:
            ReadDirectoryChangesW( hDir, ChangesBuffer, ChangesMaxBuffer, false, 
FILE_NOTIFY_CHANGE_FILE_NAME, &BufferLength, &Overlapped, NULL);

            // Wait for a signal and than continue
            HANDLE myHanldes[1];
            myHanldes[0] = myServiceSignal; /* For Thread Termination */
            myHanldes[1] = myServiceWatch;
            MsgWaitForMultipleObjects(2, myHanldes, FALSE, INFINITE, 
QS_ALLINPUT);

            if (!Terminated)
            {
                // Init variables:
                DWORD cbOffset = 0;
                DWORD OverlappedLength = 0;
                String ChangedFile = "";

                // Get Overlapped result:
                if ( GetOverlappedResult(hDir, &Overlapped, &OverlappedLength, 
TRUE) )
                    // Do reed info, while there is:
                    do
                    {
                        // Try to read next result and read current Filename:
                        cbOffset = ChangesBuffer->NextEntryOffset;
                        String ChangedFile = 
WideCharLenToString(ChangesBuffer->FileName, ChangesBuffer->FileNameLength);

                        // Update ChangesBuffer:
                        ChangesBuffer = (FILE_NOTIFY_INFORMATION*) 
((LPBYTE)ChangesBuffer + cbOffset);
                    }
                    while (cbOffset != 0);
                }
            }
        }

        // Outer finally
        __finally
        {
            // Cleanup:
            CloseHandle(myServiceWatch);
            delete ChangesBuffer;
        }

    }
Technical Details
Message-ID: <42530459$1@newsgroups.borland.com>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!newshub.sdsu.edu!cyclone.bc.net!logbridge.uoregon.edu!newsfeeds.ihug.co.nz!ihug.co.nz!newsgroups.borland.com!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Thread: 10cc67,251d042661b6c50d,start
X-Google-Attributes: gid10cc67,public
X-Google-Language: ENGLISH,ASCII-7-bit
From: "Zoetjuh" <peter@i-hate-spam.zoetjuh.demon.nl>
Newsgroups: borland.public.cppbuilder.nativeapi
Subject: ReadDirectoryChangesW - Access Violation
Date: Tue, 5 Apr 2005 23:34:19 +0200
Lines: 90
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2900.2527
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2527
X-RFC2646: Format=Flowed; Original
NNTP-Posting-Host: 82.161.4.111
Message-ID: <42530459$1@newsgroups.borland.com>
X-Trace: newsgroups.borland.com 1112736857 82.161.4.111 (5 Apr 2005 14:34:17 -0800)
Path: arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!newshub.sdsu.edu!cyclone.bc.net!logbridge.uoregon.edu!newsfeeds.ihug.co.nz!ihug.co.nz!newsgroups.borland.com!not-for-mail