From 0cda0baab21d4d4bf40c9459f6f5a7e49aa92492 Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Tue, 24 Jul 2012 12:45:18 +0000 Subject: VersionInfo, W7UI, WhoUsesMyFiles, YAPP, ZeroNotification: changed folder structure git-svn-id: http://svn.miranda-ng.org/main/trunk@1161 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/WhoUsesMyFiles/src/wumf.c | 330 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 330 insertions(+) create mode 100644 plugins/WhoUsesMyFiles/src/wumf.c (limited to 'plugins/WhoUsesMyFiles/src/wumf.c') diff --git a/plugins/WhoUsesMyFiles/src/wumf.c b/plugins/WhoUsesMyFiles/src/wumf.c new file mode 100644 index 0000000000..03aa576d38 --- /dev/null +++ b/plugins/WhoUsesMyFiles/src/wumf.c @@ -0,0 +1,330 @@ +#define MAX_CHARS 4096 +#define WS_WINDOW_STYLE WS_OVERLAPPED +#define NAME "WUMF" +#define WM_MYCMD 0x0401 + +#include "wumf.h" +static PWumf list = NULL; +static PWumf lst = NULL; + +extern WUMF_OPTIONS WumfOptions; +extern HANDLE hInst; +extern HWND hDlg; +extern char ModuleName[]; + +HANDLE hLog = INVALID_HANDLE_VALUE; +BOOL wumf(); + +static int DlgResizer(HWND hwndDlg,LPARAM lParam,UTILRESIZECONTROL *urc) { + switch(urc->wId) { + case IDC_CONNLIST: + return RD_ANCHORX_WIDTH|RD_ANCHORY_HEIGHT; + case IDOK: + return RD_ANCHORX_RIGHT|RD_ANCHORY_BOTTOM; + } + return RD_ANCHORX_LEFT|RD_ANCHORY_TOP; +} + + + +void AddToList(HWND hList, PWumf w) +{ + LVITEM lvi = { 0 }; + lvi.iItem=ListView_GetItemCount(hList)+1; + lvi.mask= LVIF_PARAM|LVIF_TEXT; + lvi.pszText = w->szID; + lvi.cchTextMax = (int)_tcslen(w->szID); + lvi.lParam = (LPARAM)w; + ListView_InsertItem(hList,&lvi); +} + +void ShowList(PWumf l, HWND hList) +{ + PWumf w; + w = l; + while(w) + { + AddToList(hList,w); + w = w->next; + } +} + +VOID OnGetDispInfo(NMLVDISPINFO *plvdi) +{ + PWumf w; + w = (PWumf)(plvdi->item.lParam); + switch (plvdi->item.iSubItem) + { + case 0: + plvdi->item.pszText = w->szID; + break; + case 1: + plvdi->item.pszText = w->szUser; + break; + case 2: + plvdi->item.pszText = w->szPath; + break; + case 3: + plvdi->item.pszText = w->szPerm; + break; + default: + break; + } +} + + +int CALLBACK ConnDlgProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ + UTILRESIZEDIALOG urd={0}; + LV_COLUMN lvc = { 0 }; + char col0[] = "ID"; + char col1[] = "User"; + char col2[] = "File"; + char col3[] = "Access"; +// char buff[256]; + HWND hList; + switch( Msg ) + { + case WM_INITDIALOG: + hList = GetDlgItem(hWnd, IDC_CONNLIST); +// ListView_DeleteAllItems(hList); + ListView_SetExtendedListViewStyle(hList, LVS_EX_FULLROWSELECT); + lvc.mask = LVCF_TEXT|LVCF_FMT|LVCF_WIDTH; + lvc.fmt = LVCFMT_LEFT; + lvc.cx = 40; + lvc.pszText = col0; + lvc.cchTextMax = sizeof(col0); + ListView_InsertColumn(hList, 0, &lvc); + lvc.cx = 50; + lvc.pszText = col1; + lvc.cchTextMax = sizeof(col1); + ListView_InsertColumn(hList, 1, &lvc); + lvc.cx = 250; + lvc.pszText = col2; + lvc.cchTextMax = sizeof(col2); + ListView_InsertColumn(hList, 2, &lvc); + lvc.cx = 50; + lvc.pszText = col3; + lvc.cchTextMax = sizeof(col3); + ListView_InsertColumn(hList, 3, &lvc); + KillTimer(NULL, 777); + lst = cpy_list(&list); + if (IsUserAnAdmin()) { + SetTimer(NULL, 777, TIME,(TIMERPROC) TimerProc); + } else { + MessageBox(NULL, "Plugin WhoUsesMyFiles requires admin privileges in order to work.", "Miranda IM", MB_OK); + } + ShowList(lst, hList); + Utils_RestoreWindowPosition(hWnd, NULL, ModuleName,"conn"); + break; + case WM_CLOSE: + PostMessage( hWnd, WM_COMMAND, IDCANCEL, 0l ); + break; + case WM_COMMAND: + switch( LOWORD(wParam) ) + { + case IDOK: + case IDCANCEL: + PostMessage( hWnd, WM_DESTROY, 0, 0l ); + break; + } + break; + case WM_SIZE: + urd.cbSize=sizeof(urd); + urd.hwndDlg=hWnd; + urd.hInstance=hInst; + urd.lpTemplate=MAKEINTRESOURCE(IDD_CONNLIST); + urd.lParam=(LPARAM)NULL; + urd.pfnResizer=DlgResizer; + ResizeDialog(0,(LPARAM)&urd); + Utils_SaveWindowPosition(hWnd, NULL, ModuleName,"conn"); + return TRUE; + case WM_MOVE: + Utils_SaveWindowPosition(hWnd, NULL, ModuleName,"conn"); + break; + case WM_NOTIFY: + switch (((LPNMHDR) lParam)->code) + { + case LVN_GETDISPINFO: + OnGetDispInfo((NMLVDISPINFO *) lParam); + break; + } + break; + case WM_DESTROY: + del_all(&lst); + PostQuitMessage(0); + break; + default: + return FALSE; + } + return TRUE; +} + +void LogWumf(PWumf w) +{ + char str[256]; + LPTSTR lpstr; + char lpDateStr[20]; + char lpTimeStr[20]; + SYSTEMTIME time; + DWORD bytes; + + if(!WumfOptions.LogFolders && (w->dwAttr & FILE_ATTRIBUTE_DIRECTORY)) return; + + if(hLog == INVALID_HANDLE_VALUE || hLog == NULL) + { + hLog = CreateFile(WumfOptions.LogFile, + GENERIC_WRITE, + FILE_SHARE_READ, + (LPSECURITY_ATTRIBUTES) NULL, + OPEN_ALWAYS, + FILE_ATTRIBUTE_NORMAL, + (HANDLE) NULL); + if(hLog == INVALID_HANDLE_VALUE) + { + FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + GetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language + (LPTSTR) &lpstr, + 0, + NULL); + wsprintf(str, "Can't open log file %s\nError:%s", WumfOptions.LogFile, lpstr); + LocalFree(lpstr); + MessageBox( NULL, str, "Error opening file", MB_OK | MB_ICONSTOP); + WumfOptions.LogToFile = FALSE; + } + } + GetLocalTime(&time); + GetDateFormat(LOCALE_USER_DEFAULT,DATE_SHORTDATE, &time,NULL, lpDateStr, 20); + GetTimeFormat(LOCALE_USER_DEFAULT,TIME_FORCE24HOURFORMAT|TIME_NOTIMEMARKER, &time,NULL, lpTimeStr, 20); + wsprintf(str ,"%s %s %20s\t%s\r\n\0",lpDateStr, lpTimeStr, w->szUser, w->szPath); + SetFilePointer (hLog, 0, NULL, FILE_END); + WriteFile(hLog, str, (DWORD)_tcslen(str), &bytes, NULL); +} + +/* +BOOL wumf() +{ + FILE_INFO_3 *buf, *cur; + SESSION_INFO_0 *sinfo; + DWORD read, total, resumeh, rc, i, sess = 0L; + wchar_t server[20]; + char user[512], path[512], comp[512]; + char* UNC = NULL; + PWumf w = NULL; + + mbstowcs( server, "\\\\.", 8); + resumeh = 0; + + mark_all(&list, TRUE); + do + { + buf = NULL; + rc = NetFileEnum( (LPWSTR)server, + NULL, + NULL, 3, + (BYTE **) &buf, 2048, &read, &total, &resumeh ); + if ( rc != ERROR_MORE_DATA && rc != ERROR_SUCCESS ) + break; + for ( i = 0, cur = buf; i < read; ++ i, ++ cur) + { + w = fnd_cell(&list, cur->fi3_id); + if(!w) + { + wcstombs(user, (wchar_t *) cur->fi3_username, 512); + wcstombs(path, (wchar_t *) cur->fi3_pathname, 512); + + w = new_wumf(cur->fi3_id, user, path, comp, UNC, sess, cur->fi3_permissions,GetFileAttributes(path)); + w->mark = FALSE; + if(!add_cell(&list, w)){ + msg("Error memory allocation"); + return FALSE; + }; + + if(WumfOptions.PopupsEnabled) ShowWumfPopUp(w); + if(WumfOptions.LogToFile) LogWumf(w); + } + else + w->mark = FALSE; + } + if(buf != NULL) NetApiBufferFree( buf ); + } while(rc == ERROR_MORE_DATA); + return del_marked(&list); +};*/ + +BOOL wumf() +{ + LPSESSION_INFO_1 s_info = NULL; + DWORD ent_read = 0, ent_total = 0, res_handle = 0, i = 0; + NET_API_STATUS res = NERR_Success; + if( (res = NetSessionEnum(NULL, NULL, NULL, 1, (LPBYTE *)&s_info, MAX_PREFERRED_LENGTH, &ent_read, &ent_total, &res_handle)) == NERR_Success || + res == ERROR_MORE_DATA) + { + mark_all(&list, TRUE); + for(i = 0; i < ent_read; i++) + { + process_session(s_info[ i ]); + } + NetApiBufferFree(s_info); + } else { + printError(res); + } + return del_marked(&list); +}; + +void process_session(SESSION_INFO_1 s_info) +{ + LPFILE_INFO_3 f_info = NULL; + DWORD ent_read = 0, ent_total = 0, res_handle = 0, i = 0; + NET_API_STATUS res = NERR_Success; + if( (res = NetFileEnum(NULL, NULL, s_info.sesi1_username, 3, (LPBYTE *)&f_info, MAX_PREFERRED_LENGTH, &ent_read, &ent_total, &res_handle)) == NERR_Success || + res == ERROR_MORE_DATA) + { + for(i = 0; i < ent_read; i++) + { + process_file(s_info, f_info[ i ]); + } + NetApiBufferFree(f_info); + } else { + printError(res); + } +} + +void process_file(SESSION_INFO_1 s_info, FILE_INFO_3 f_info) +{ + PWumf w = fnd_cell(&list, f_info.fi3_id); + if(!w) + { + w = new_wumf(f_info.fi3_id, f_info.fi3_username, f_info.fi3_pathname, s_info.sesi1_cname, NULL, 0, f_info.fi3_permissions, GetFileAttributes(f_info.fi3_pathname)); + w->mark = FALSE; + if(!add_cell(&list, w)){ + msg("Error memory allocation"); + }; + if(WumfOptions.PopupsEnabled) ShowWumfPopUp(w); + if(WumfOptions.LogToFile) LogWumf(w); + } else { + w->mark = FALSE; + } +} + +void printError(DWORD res) +{ + LPVOID lpMsgBuf; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS, NULL, res, 0, (LPTSTR) &lpMsgBuf, 0, NULL ); + OutputDebugString(lpMsgBuf); + msg(lpMsgBuf); + LocalFree( lpMsgBuf ); +} + +VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) +{ + if(!wumf()) + KillTimer(NULL, 777); +}; + +void FreeAll() +{ + del_all(&list); +}; -- cgit v1.2.3