int _tmain(int argc, _TCHAR* argv[])
{
LPSESSION_INFO_502 pBuf = NULL;
LPSESSION_INFO_502 pTmpBuf;
DWORD dwLevel = 502;
DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;
DWORD dwEntriesRead = 0;
DWORD dwTotalEntries = 0;
DWORD dwResumeHandle = 0;
DWORD i;
DWORD dwTotalCount = 0;
LPTSTR pszServerName = NULL;
LPTSTR pszClientName = NULL;
LPTSTR pszUserName = NULL;
NET_API_STATUS nStatus;
//
// Check command line arguments.
//
//
// Call the NetSessionEnum function, specifying level 10.
//
AnsiString q1 = TimeToStr(Time());
do // begin do
{
printf("\tNow Time: %s\n", q1);
nStatus = NetSessionEnum(NULL,
NULL,
NULL,
dwLevel,
(LPBYTE*)&pBuf,
dwPrefMaxLen,
&dwEntriesRead,
&dwTotalEntries,
&dwResumeHandle);
if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
{
if ((pTmpBuf = pBuf) != NULL)
{
//
// Loop through the entries.
//
for (i = 0; (i dwEntriesRead); i++)
{
assert(pTmpBuf != NULL);
if (pTmpBuf == NULL)
{
fprintf(stderr, "An access violation has occurred\n");
break;
}
//
// Print the retrieved data.
//
wprintf(L"\n\tClient: %s\n", pTmpBuf->sesi502_cname);
wprintf(L"\n\tUser: %s\n", pTmpBuf->sesi502_username);
wprintf(L"\n\tTransport: %s\n", pTmpBuf->sesi502_transport);
printf("\tidle-Time: %d\n", pTmpBuf->sesi502_idle_time);
wprintf(L"\n\tCltype name: %s\n", pTmpBuf->sesi502_cltype_name);
pTmpBuf++;
dwTotalCount++;
}
BYTE outBuffer[5120];
VOID *pBuf1 = (BYTE*)&outBuffer;
FILE_NOTIFY_INFORMATION InfoNotify1;
DWORD InfoNotify;
BOOL ResultReadChange;
DWORD outSize = sizeof(outBuffer);
HANDLE hDir = CreateFile("D:\\Post\\",
FILE_LIST_DIRECTORY,
FILE_SHARE_READ|FILE_SHARE_DELETE|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS,
NULL);
ResultReadChange = ReadDirectoryChangesW(hDir,
&outBuffer,
outSize,
TRUE,
FILE_NOTIFY_CHANGE_CREATION|
FILE_NOTIFY_CHANGE_LAST_WRITE|
FILE_NOTIFY_CHANGE_SIZE|
FILE_NOTIFY_CHANGE_ATTRIBUTES|
FILE_NOTIFY_CHANGE_DIR_NAME|
FILE_NOTIFY_CHANGE_FILE_NAME,
&InfoNotify,
NULL,
NULL);
if ( ResultReadChange )
{ FILE_NOTIFY_INFORMATION* pInfo = (FILE_NOTIFY_INFORMATION*) pBuf1;
if (pInfo->Action == FILE_ACTION_ADDED ||
pInfo->Action == FILE_ACTION_REMOVED ||
pInfo->Action == FILE_ACTION_MODIFIED ||
(pInfo->Action == FILE_ACTION_RENAMED_OLD_NAME &&
pInfo->Action == FILE_ACTION_RENAMED_NEW_NAME))
{
char lpFileName[MAX_PATH];
WideCharToMultiByte(CP_ACP,
0,
pInfo->FileName,
pInfo->FileNameLength/2,
lpFileName,
MAX_PATH,
0,
0);
lpFileName[pInfo->FileNameLength/2] = 0;
pInfo += pInfo->NextEntryOffset;
q1 = TimeToStr(Time());
printf("\t open time: %s\n",q1);
printf("\t open: %s \n",lpFileName);
}
}
}
}
//ReadDirectoryChangesW
//
// If the call succeeds,
//
else
fprintf(stderr, "A system error has occurred: %d\n", nStatus);
//
// Free the allocated memory.
//
if (pBuf != NULL)
{
NetApiBufferFree(pBuf);
pBuf = NULL;
}
}
//
// Continue to call NetSessionEnum while
// there are more entries.
//
while (nStatus == ERROR_MORE_DATA); // end do
// Check again for an allocated buffer.
//
if (pBuf != NULL)
NetApiBufferFree(pBuf);
//
// Print the final count of sessions enumerated.
//
fprintf(stderr, "\nTotal of %d entries enumerated\n", dwTotalCount);
system("pause");
return 0;
}
за основу взяты примеры выше ссылки. Просто соединил.
но хотелось еще большего. А точнее кто именно записывает файл, если подключений больше чем 1. Может я не увидел чего..