亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dwatchdlg.cpp

?? 監控文件目錄的VC程序
?? CPP
字號:
// dwatchDlg.cpp : implementation file
//

#include "stdafx.h"
#include "winsvc.h"	// Fuer Admi-Test
#include "dwatch.h"
#include "optionsdialog.h"
#include "dwatchDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

// Undokumentierte Funktion aus ntdll.dll
// Parameters
// ----------
// 1. FileHandle
// 2. EventHandle (OPTIONAL)
// 3. &ApcRoutine (OPTIONAL)
// 4. &ApcContext (OPTIONAL)
// 5. &IO_STATUS_BLOCK (2 DWORDS)
// 6. &buffer (FILE_NOTIFY_INFORMATION)
// 7. BufferLength
// 8. Flags
// 9. BOOL -> Subdirectories ueberwachen oder nicht
extern "C"
DWORD __stdcall NtNotifyChangeDirectoryFile (HANDLE, HANDLE, PVOID, PVOID, PVOID, PVOID, DWORD, DWORD, BOOL);

// Watch-Handles
HANDLE watchhandle[8];
// Watch-Info fuer den jeweiligen Thread
DWORD threadinfo[8];
// MFC-Threads
CWinThread *threads[8];
// Thread-synchronisation
CRITICAL_SECTION csection;


////////////////////////////////////////////////////////////////////////////
// EXTRA THREADS --- not class members

// Wartet die initialisierung dieser App ab
// ... und laesst dann die Options-Box erscheinen
// Ausserdem wird die Groesse des Fensters eingestellt
void WaitFunc (CDwatchDlg *cdw)
{
	WaitForInputIdle (GetCurrentProcess(), 10000);
	HWND hwnd = cdw->GetSafeHwnd();
	SetWindowPos (hwnd, NULL, 0, 0, 600, 300, SWP_NOMOVE | SWP_NOZORDER); 
	SendMessage (hwnd, WM_CONTEXTMENU, 0, 0L); 
}

// Sorgt dafuer, dass das ListCtrl wieder sichtbar wird
void VisibilityFunc (CDwatchDlg *cdw)
{
	SetThreadPriority (GetCurrentThread(), THREAD_PRIORITY_IDLE);
	Sleep (2000);
	for (;;)
	{
		Sleep (2000);
		if (cdw->m_listctrl.GetSafeHwnd() && cdw->m_visibility == FALSE)
		{
			cdw->m_listctrl.SendMessage (WM_SETREDRAW, TRUE, 0L);
			cdw->m_listctrl.InvalidateRect (NULL);
			cdw->m_listctrl.UpdateWindow();
			cdw->m_visibility = TRUE;
		}
	}
}

// Jeder einzelne "Watch" wird als Thread ausgef黨rt
void Threadfunc (CDwatchDlg *cdw)
{
	// Thread findet sich selbst
	int s;
	int tnum = -1;
	for (s=0; s<8; s++)
	{
		if (threads[s])
		{
			if (threads[s]->m_nThreadID == GetCurrentThreadId())
			{
				tnum = s;
				break;
			}
		}
	}
	// WatchHandle oeffnen
	watchhandle[tnum] = CreateFile (cdw->m_options.m_dirname,
									FILE_LIST_DIRECTORY,
									FILE_SHARE_READ | FILE_SHARE_WRITE,
									NULL,
									OPEN_EXISTING,
									FILE_FLAG_BACKUP_SEMANTICS,
									NULL);
	BYTE buffer[1024];
	DWORD io_status_block[2];
	for (;;)
	{
		ZeroMemory (buffer, sizeof (buffer));
		NtNotifyChangeDirectoryFile (watchhandle[tnum], 
									 NULL,
									 NULL,
									 NULL,
									 &io_status_block,
									 &buffer,
									 sizeof (buffer),
									 threadinfo[tnum],
									 TRUE);
		WaitForSingleObject (watchhandle[tnum], INFINITE);
		EnterCriticalSection (&csection);
		cdw->SetEntry (tnum, (FILE_NOTIFY_INFORMATION*)buffer);
		LeaveCriticalSection (&csection);
	}	
}





/////////////////////////////////////////////////////////////////////////////
// HelperFuncs

// Einen Eintrag im ListCtrl setzen.... wird vom jeweiligen Thread gemacht
// ...buffer zeigt auf eine	struct -> FILE_NOTIFY_INFORMATION
// TIME-CRITICAL !!!!
void CDwatchDlg::SetEntry (int num, FILE_NOTIFY_INFORMATION *buffer)
{
	// Local vars
	static SYSTEMTIME st;
	static char string[256];
	static int numitems;
	static char *action;
	static int s;

	// ListCtrl abschalten, damit die Threads schneller sind...
	if (m_visibility)
	{
		m_visibility = FALSE;
		m_listctrl.SendMessage (WM_SETREDRAW, FALSE, 0L);
	}

	numitems = m_listctrl.GetItemCount();
	// Zeit eintragen
	GetLocalTime (&st);
	sprintf (string, "%02d:%02d:%02d", st.wHour, st.wMinute, st.wSecond);
	m_listctrl.InsertItem (numitems, string);
	// Thread-info eintragen
	m_listctrl.SetItemText (numitems, 1, m_infotxt[num]);
	// Aktion eintragen
	switch (buffer->Action)
	{
		case FILE_ACTION_ADDED:
		action = "++ created ++";
		break;

		case FILE_ACTION_REMOVED:
		action = "-- removed --";
		break;

		case FILE_ACTION_MODIFIED:
		action = "< modified >";
		break;

		case FILE_ACTION_RENAMED_OLD_NAME:
		action = "renaming...";
		break;

		case FILE_ACTION_RENAMED_NEW_NAME:
		action = "...renamed";
		break;

		default:
		action = "Unknown";
		break;
	}
	m_listctrl.SetItemText (numitems, 2, action);
	// File/Directory-Namen eintragen
	for (s=0; s<(int)buffer->FileNameLength; s++)
		string[s] = (char)buffer->FileName[s];
	string[s+1] = (char)0;
	m_listctrl.SetItemText (numitems, 3, string);

	// Eventuell alles noch einmal
	if (buffer->NextEntryOffset)
		SetEntry (num, (FILE_NOTIFY_INFORMATION*)((BYTE*)buffer + buffer->NextEntryOffset));
}


// Threads Killen und zugehoerige Watchhandles schliessen
// ... und Critical-Section-Objekt erneuern
void CDwatchDlg::KillAllThreads (void)
{
	int s;
	for (s=0; s<8; s++)
	{
		if (threads[s])
		{
			HANDLE hthread = threads[s]->m_hThread;
			TerminateThread (hthread, 0);
			delete threads[s];
			CloseHandle (hthread);
			CloseHandle (watchhandle[s]);
			threads[s] = NULL;
		}
	}	
	DeleteCriticalSection (&csection);
	InitializeCriticalSection (&csection);
}

// Titelzeile aktualisieren
void CDwatchDlg::UpdateTitle (BOOL flag)
{
	CString cs = "Directory Watchdog";
	if (flag)
		cs = cs + " <" + m_options.m_dirname + ">";
	else
		cs = cs + " <stopped>";
	SetWindowText (cs);
}

/////////////////////////////////////////////////////////////////////////////
// CDwatchDlg dialog

CDwatchDlg::CDwatchDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDwatchDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDwatchDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT

	// Auf Admi testen
	SC_HANDLE sch = OpenSCManager (NULL, NULL, SC_MANAGER_ALL_ACCESS);
	if (!sch)
	{
		MessageBox ("You must log on as an administrator to use this tool...", 
					"Sorry", 
					MB_ICONSTOP);
		ExitProcess (0);
	}
	CloseServiceHandle (sch);
	
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

	// CWinThread-Pointers und Watchhandles loeschen
	int s;
	for (s=0; s<8; s++)
	{
		threads[s] = NULL;
		watchhandle[s] = NULL;
	}

	// Critical Section anlegen
	InitializeCriticalSection (&csection);

	// WatchInfo-Flags laden
	threadinfo[0] = FILE_NOTIFY_CHANGE_LAST_ACCESS;
	threadinfo[1] = FILE_NOTIFY_CHANGE_ATTRIBUTES;
	threadinfo[2] = FILE_NOTIFY_CHANGE_DIR_NAME;
	threadinfo[3] = FILE_NOTIFY_CHANGE_FILE_NAME;
	threadinfo[4] = FILE_NOTIFY_CHANGE_SECURITY;
	threadinfo[5] = FILE_NOTIFY_CHANGE_SIZE;
	threadinfo[6] = FILE_NOTIFY_CHANGE_CREATION;
	threadinfo[7] = FILE_NOTIFY_CHANGE_LAST_WRITE;

	// WatchInfo-Texte laden
	m_infotxt[0] = "Read";
	m_infotxt[1] = "Attributes";
	m_infotxt[2] = "Directory";
	m_infotxt[3] = "File";
	m_infotxt[4] = "Security";
	m_infotxt[5] = "Size";
	m_infotxt[6] = "TimeStamp";
	m_infotxt[7] = "Write";
	
	m_visibility = TRUE;
	
	// Nachtr鋑liche Initialisierung starten
	AfxBeginThread ((AFX_THREADPROC)WaitFunc, this);

	// ListCtrl-Updater starten
	m_updater = AfxBeginThread ((AFX_THREADPROC)VisibilityFunc, this);
}

void CDwatchDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDwatchDlg)
	DDX_Control(pDX, IDC_LIST1, m_listctrl);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CDwatchDlg, CDialog)
	//{{AFX_MSG_MAP(CDwatchDlg)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_WM_SIZE()
	ON_WM_CONTEXTMENU()
	ON_WM_CLOSE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDwatchDlg message handlers

BOOL CDwatchDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	
	// ListControl vorbereiten
	char *ColTxt[] = { "Time", "File Access", "Action", "Filename"};
	int i;
	LV_COLUMN lvc;
	lvc.mask=LVCF_FMT | LVCF_TEXT | LVCF_SUBITEM;
	lvc.iSubItem=-1;
	for(i=0; i<4; i++)
	{
		lvc.pszText = ColTxt[i];
		lvc.fmt = LVCFMT_LEFT;
		m_listctrl.InsertColumn (i,&lvc);
	}

	return TRUE;  // return TRUE  unless you set the focus to a control
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CDwatchDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CDwatchDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

// ListCtrl anpassen
void CDwatchDlg::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	
	if (m_listctrl.GetSafeHwnd())
	{
		int ptx = cx/6;
		m_listctrl.MoveWindow (0,0, cx, cy);
		m_listctrl.SetColumnWidth (0, ptx);
		m_listctrl.SetColumnWidth (1, ptx);
		m_listctrl.SetColumnWidth (2, ptx);
		m_listctrl.SetColumnWidth (3, cx-ptx-ptx-ptx);
	}
}

void CDwatchDlg::OnContextMenu(CWnd* pWnd, CPoint point) 
{
	switch (m_options.DoModal())
	{
		// Threads starten, alte Killen
		// Die komische Prozedur von wegen Thread suspended createn und
		// dann zu resumen ist noetig, damit die CWinThread-Pointer gueltige
		// Werte haben, wenn die Threads loslegen.....
		case 0:
		KillAllThreads();
		UpdateTitle (TRUE);
		if (m_options.m_access)
		{
			threads[0] = AfxBeginThread ((AFX_THREADPROC)Threadfunc, 
										this, 
										THREAD_PRIORITY_TIME_CRITICAL, 
										0, 
										CREATE_SUSPENDED);
			threads[0]->ResumeThread();
		}
		if (m_options.m_attributes)
		{
			threads[1] = AfxBeginThread ((AFX_THREADPROC)Threadfunc, 
										this, 
										THREAD_PRIORITY_TIME_CRITICAL, 
										0, 
										CREATE_SUSPENDED);
			threads[1]->ResumeThread();
		}
		if (m_options.m_dirnames)
		{
			threads[2] = AfxBeginThread ((AFX_THREADPROC)Threadfunc, 
										this, 
										THREAD_PRIORITY_TIME_CRITICAL, 
										0, 
										CREATE_SUSPENDED);
			threads[2]->ResumeThread();
		}
		if (m_options.m_filenames)
		{
			threads[3] = AfxBeginThread ((AFX_THREADPROC)Threadfunc, 
										this, 
										THREAD_PRIORITY_TIME_CRITICAL, 
										0, 
										CREATE_SUSPENDED);
			threads[3]->ResumeThread();
		}
		if (m_options.m_security)
		{
			threads[4] = AfxBeginThread ((AFX_THREADPROC)Threadfunc, 
										this, 
										THREAD_PRIORITY_TIME_CRITICAL, 
										0, 
										CREATE_SUSPENDED);
			threads[4]->ResumeThread();
		}
		if (m_options.m_size)
		{
			threads[5] = AfxBeginThread ((AFX_THREADPROC)Threadfunc, 
										this, 
										THREAD_PRIORITY_TIME_CRITICAL, 
										0, 
										CREATE_SUSPENDED);
			threads[5]->ResumeThread();
		}
		if (m_options.m_tstamp)
		{
			threads[6] = AfxBeginThread ((AFX_THREADPROC)Threadfunc, 
										this, 
										THREAD_PRIORITY_TIME_CRITICAL, 
										0, 
										CREATE_SUSPENDED);
			threads[6]->ResumeThread();
		}
		if (m_options.m_write)
		{
			threads[7] = AfxBeginThread ((AFX_THREADPROC)Threadfunc, 
										this, 
										THREAD_PRIORITY_TIME_CRITICAL, 
										0, 
										CREATE_SUSPENDED);
			threads[7]->ResumeThread();
		}
		break;

		// Threads stoppen/loeschen
		case 1:
		KillAllThreads();
		UpdateTitle (FALSE);
		break;
		
		// Display loeschen
		case 2:
		m_listctrl.DeleteAllItems();
		break;

		// Absaven
		case 3:
		{
			CFileDialog cf (FALSE, NULL, "*.*");
			cf.m_ofn.Flags &= ~OFN_EXPLORER;
			if (cf.DoModal() == IDOK)
			{	
				CString cs = cf.GetPathName();
				CFile cfile(cs, CFile::modeCreate | CFile::modeWrite);
				cs.Format ("Directory scan of: %s\n\n", m_options.m_dirname);
				cfile.Write (cs, cs.GetLength());
				int s;
				for (s=0; s<m_listctrl.GetItemCount(); s++)
				{
					cs.Format ("%-20s %-20s %-20s %s\n", 
								m_listctrl.GetItemText (s, 0),
								m_listctrl.GetItemText (s, 1),
								m_listctrl.GetItemText (s, 2),
								m_listctrl.GetItemText (s, 3));
					cfile.Write (cs, cs.GetLength()); 
				}
				cfile.Close();
			}
		}
		break;
	
	}
}

// Threads killen, sonst Haenger!!!
void CDwatchDlg::OnClose() 
{
	KillAllThreads();
	TerminateThread (m_updater->m_hThread, 0);
	delete m_updater;
	CDialog::OnClose();
}

// Return-Taste -> Options-Dialog starten
void CDwatchDlg::OnOK()
{
	OnContextMenu (NULL, 0);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成a人v欧美综合天堂| 国产盗摄一区二区三区| 色综合天天视频在线观看| 久久精品视频一区二区三区| 久久69国产一区二区蜜臀| 精品久久人人做人人爰| 国产在线国偷精品免费看| 精品国产sm最大网站| 国产一区二区三区四区五区入口| 欧美精品一区二区蜜臀亚洲| 国产成人精品一区二| 中文字幕一区二区三区蜜月| 91国偷自产一区二区三区观看| 亚洲精品欧美在线| 日韩一区二区三区在线| 国产黄色精品网站| 日韩毛片高清在线播放| 欧美乱熟臀69xxxxxx| 美女久久久精品| 欧美激情一区二区三区四区 | 亚洲精选一二三| 欧美日本免费一区二区三区| 久久99精品久久久久久动态图 | 欧美一区二区三区在线看| 国产一区二区女| 亚洲精品日产精品乱码不卡| 精品少妇一区二区三区在线视频| 国产精品99久久久久| 亚洲国产视频a| 国产欧美日产一区| 欧美日韩三级一区二区| 国产精品小仙女| 亚洲香蕉伊在人在线观| 成人小视频在线| 成人精品一区二区三区中文字幕| 亚洲激情av在线| 欧美成人r级一区二区三区| av午夜精品一区二区三区| 亚洲激情成人在线| 日韩不卡手机在线v区| 欧美韩国日本不卡| 91精品国产全国免费观看| 国产91丝袜在线播放九色| 香蕉成人伊视频在线观看| 国产精品乱码久久久久久| 欧美精品国产精品| 不卡区在线中文字幕| 久久精品国产99国产| 一个色综合网站| 中文幕一区二区三区久久蜜桃| 欧美精品乱人伦久久久久久| 91丝袜呻吟高潮美腿白嫩在线观看| 麻豆精品新av中文字幕| 亚洲成在线观看| 亚洲少妇屁股交4| 日本一区二区三区久久久久久久久不| 欧美日韩视频不卡| 一本色道久久综合狠狠躁的推荐| 国产制服丝袜一区| 老司机免费视频一区二区三区| 亚洲国产中文字幕在线视频综合 | 性欧美疯狂xxxxbbbb| 国产精品免费久久久久| 久久亚洲私人国产精品va媚药| 欧美卡1卡2卡| 欧美亚洲综合久久| 色噜噜狠狠成人中文综合| 成人久久久精品乱码一区二区三区 | 亚洲成人久久影院| 亚洲品质自拍视频网站| 国产精品丝袜一区| 国产精品视频yy9299一区| 一本色道久久综合亚洲aⅴ蜜桃| 国产综合色在线| 蜜臀99久久精品久久久久久软件 | 国产女人18毛片水真多成人如厕| 欧美大肚乱孕交hd孕妇| 欧美精选在线播放| 制服丝袜亚洲精品中文字幕| 欧美日韩你懂的| 欧美日韩高清在线| 91精品国产综合久久久久久| 欧美日产在线观看| 日韩一二三区不卡| 日韩精品专区在线影院观看| 精品三级在线看| 久久久精品黄色| 国产精品成人一区二区艾草| 日韩毛片在线免费观看| 亚洲精品你懂的| 亚洲成人黄色影院| 美女在线一区二区| 国产精品1024久久| 色综合久久久久网| 欧美日韩的一区二区| 日韩三级在线观看| 国产午夜精品久久久久久久| 国产精品毛片久久久久久| 国产精品久久久久久久久久免费看 | 亚洲老司机在线| 午夜精品久久久久久久久久 | 欧美另类z0zxhd电影| 欧美一区二区日韩| 久久久久久久久久久久电影| 中文字幕一区不卡| 亚洲一区二区av电影| 老司机免费视频一区二区三区| 国产精品88av| 在线视频国内自拍亚洲视频| 欧美一级高清片| 中文字幕国产精品一区二区| 亚洲在线成人精品| 国产综合色视频| 在线观看欧美精品| 精品伦理精品一区| 亚洲男人都懂的| 久久国产精品99久久久久久老狼 | 久久先锋影音av鲁色资源网| 国产精品久久一卡二卡| 亚洲国产精品久久久久秋霞影院| 久久国产精品99久久人人澡| 99久久精品免费精品国产| 欧美精品色一区二区三区| 日本一区二区三区dvd视频在线| 亚洲一区在线电影| 国产凹凸在线观看一区二区| 欧美日韩一区二区不卡| 国产精品三级电影| 蜜桃视频一区二区| 欧美在线观看视频一区二区| 国产亚洲一区二区三区在线观看| 亚洲成人精品影院| 99久久综合国产精品| 日韩欧美视频在线| 亚洲综合色网站| 波多野结衣在线一区| 日韩欧美中文字幕一区| 亚洲影院在线观看| 成人av在线影院| 久久久久久久综合色一本| 日本欧美加勒比视频| 在线视频综合导航| 国产精品日产欧美久久久久| 国产一区二区三区在线观看免费视频| 欧美最猛黑人xxxxx猛交| 中文天堂在线一区| 国产乱理伦片在线观看夜一区| 日韩三级伦理片妻子的秘密按摩| 一级特黄大欧美久久久| 成人免费视频视频在线观看免费| 精品嫩草影院久久| 午夜精品一区二区三区电影天堂| 色综合久久久久久久久| 国产女主播一区| 国产在线精品一区二区三区不卡| 欧美一级日韩免费不卡| 亚洲国产精品一区二区久久恐怖片 | 色综合网站在线| 日本一区二区成人在线| 国产乱码字幕精品高清av| 日韩欧美在线综合网| 日韩影院在线观看| 欧美少妇bbb| 一个色综合av| 在线成人av影院| 亚洲成人午夜影院| 91精品国产综合久久久蜜臀粉嫩| 亚洲地区一二三色| 欧美日韩成人一区二区| 亚洲国产成人av| 欧美精品xxxxbbbb| 日韩av在线播放中文字幕| 日韩欧美国产系列| 精品一区二区三区av| 久久一二三国产| 国产乱子伦视频一区二区三区| xnxx国产精品| 大胆欧美人体老妇| 亚洲另类在线制服丝袜| 欧美猛男gaygay网站| 婷婷中文字幕综合| 日韩欧美一二三区| 国产成人亚洲综合a∨婷婷图片| 国产欧美日韩不卡| 日本丰满少妇一区二区三区| 一区二区三区四区在线播放| 欧美日韩国产不卡| 激情图片小说一区| 国产精品久久看| 欧洲亚洲精品在线| 国产精品456| 亚洲欧洲美洲综合色网| 91精彩视频在线观看| 午夜a成v人精品| 久久精品视频免费| 色综合色狠狠综合色| 美女视频黄免费的久久 | 日本女人一区二区三区| 久久久久久97三级| 在线观看免费视频综合|