Реферат: Характеристика Win32

--PAGE_BREAK--2. Бондарев М.Ф. Липанов А.В. Путятин Е.П. Синельникова Т.Ф. Системное программирование в современных операционных системах «Компания СМИТ» – Харьков, 2005. – 432 с.
3. Холзнер С. VisualС++. «Питер» – Санкт Петербург, 2006. – 580 с.

4. Павловская Т.А. С/С++. Программирование на языке высокого уровня – СПб: Издательство «Питер», 2001. –464 с.

5. Саймон Р. Microsoft Windows API. Справочник системного программиста. «DiaSoft» – Киев, 2004. – 1216 с.

6.rsdn.ru/

7. www.source-code.ru

8. www.codeguru.com



Приложение
Тексты файлов программы
·                   enumproc.cpp
#include «stdafx.h»

#include «enumproc.h»
#include <tlhelp32.h>

#include <pdh.h>

#include <pdhmsg.h>
#include <comdef.h>

#include «SshWbemHelpers.h»

 // Some definitions from NTDDK and other sources

 //
typedef LONG      NTSTATUS;

typedef LONG      KPRIORITY;
#define NT_SUCCESS(Status) ((NTSTATUS) (Status) >= 0)
#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS) 0xC0000004L)
#define SystemProcessesAndThreadsInformation5
typedef struct _CLIENT_ID {

DWORD     UniqueProcess;

DWORD     UniqueThread;

} CLIENT_ID;
typedef struct _UNICODE_STRING {

USHORT    Length;

USHORT    MaximumLength;

PWSTR      Buffer;

} UNICODE_STRING;
typedef struct _VM_COUNTERS {

SIZE_T       PeakVirtualSize;

SIZE_T       VirtualSize;

ULONG      PageFaultCount;

SIZE_T       PeakWorkingSetSize;

SIZE_T       WorkingSetSize;

SIZE_T       QuotaPeakPagedPoolUsage;

SIZE_T       QuotaPagedPoolUsage;

SIZE_T       QuotaPeakNonPagedPoolUsage;

SIZE_T       QuotaNonPagedPoolUsage;

SIZE_T       PagefileUsage;

SIZE_T       PeakPagefileUsage;

} VM_COUNTERS;
typedef struct _SYSTEM_THREADS {

LARGE_INTEGER KernelTime;

LARGE_INTEGER UserTime;

LARGE_INTEGER CreateTime;

ULONG                         WaitTime;

PVOID                          StartAddress;

CLIENT_ID         ClientId;

KPRIORITY        Priority;

KPRIORITY        BasePriority;

ULONG                         ContextSwitchCount;

LONG                           State;

LONG                           WaitReason;

} SYSTEM_THREADS, * PSYSTEM_THREADS;
 // Note that the size of the SYSTEM_PROCESSES structure is different on

 // NT 4 and Win2K, but we don't care about it, since we don't access neither

 // IoCounters member nor Threads array
typedef struct _SYSTEM_PROCESSES {

ULONG                         NextEntryDelta;

ULONG                         ThreadCount;

ULONG                         Reserved1 [6];

LARGE_INTEGER CreateTime;

LARGE_INTEGER UserTime;

LARGE_INTEGER KernelTime;

UNICODE_STRING ProcessName;

KPRIORITY        BasePriority;

ULONG                         ProcessId;

ULONG                         InheritedFromProcessId;

ULONG                         HandleCount;

ULONG                         Reserved2 [2];

VM_COUNTERSVmCounters;

#if _WIN32_WINNT >= 0x500

IO_COUNTERS  IoCounters;

#endif

SYSTEM_THREADS Threads[1];

} SYSTEM_PROCESSES, * PSYSTEM_PROCESSES;

 // –

 // EnumProcesses_NtApi
BOOL

WINAPI

EnumProcesses_NtApi (

IN LPCTSTR pszMachineName,

IN PFNENUMPROC pfnEnumProc,

IN LPARAM lParam

)

{

_UNUSED(pszMachineName);
_ASSERTE (pfnEnumProc!= NULL);

_ASSERTE (pszMachineName == NULL);
HINSTANCE hNtDll;

NTSTATUS (WINAPI * _ZwQuerySystemInformation) (UINT, PVOID, ULONG, PULONG);
 // get handle to NTDLL.DLL

hNtDll = GetModuleHandle (_T(«ntdll.dll»));

_ASSERTE (hNtDll!= NULL);
 // find the address of ZwQuerySystemInformation

*(FARPROC *)&_ZwQuerySystemInformation =

GetProcAddress (hNtDll, «ZwQuerySystemInformation»);

if (_ZwQuerySystemInformation == NULL)

return SetLastError (ERROR_PROC_NOT_FOUND), FALSE;
 // obtain a handle to the default process heap

HANDLE hHeap = GetProcessHeap();

FILETIME Local_CreateTime, MyCreateTime;

SYSTEMTIME System_CreateTime;

char CreateTime_str[55];
NTSTATUS Status;

ULONG cbBuffer = 0x8000;

PVOID pBuffer = NULL;
do

{

pBuffer = HeapAlloc (hHeap, 0, cbBuffer);

if (pBuffer == NULL)

return SetLastError (ERROR_NOT_ENOUGH_MEMORY), FALSE;
Status = _ZwQuerySystemInformation (

SystemProcessesAndThreadsInformation,

pBuffer, cbBuffer, NULL);
if (Status == STATUS_INFO_LENGTH_MISMATCH)

{

HeapFree (hHeap, 0, pBuffer);

cbBuffer *= 2;

}

else if (! NT_SUCCESS(Status))

{

HeapFree (hHeap, 0, pBuffer);

return SetLastError(Status), FALSE;

}

}

while (Status == STATUS_INFO_LENGTH_MISMATCH);
PSYSTEM_PROCESSES pProcesses = (PSYSTEM_PROCESSES) pBuffer;
for (;)

{

PCWSTR pszProcessName = pProcesses->ProcessName. Buffer;
MyCreateTime.dwHighDateTime = pProcesses->CreateTime. HighPart;

MyCreateTime.dwLowDateTime = pProcesses->CreateTime. LowPart;

if (MyCreateTime.dwLowDateTime!= 0 && MyCreateTime.dwHighDateTime!= 0)

{

FileTimeToLocalFileTime (&MyCreateTime,&Local_CreateTime);

FileTimeToSystemTime (&Local_CreateTime,&System_CreateTime);

sprintf (CreateTime_str, «%02u:%02u:%02u:%03u\0», System_CreateTime.wHour, System_CreateTime.wMinute, System_CreateTime.wSecond, System_CreateTime.wMilliseconds);

}

else

{

sprintf (CreateTime_str, «00:00:00:000\0»);

}

if (pszProcessName == NULL)

pszProcessName = L «Idle»;
#ifdef _UNICODE
if (! pfnEnumProc (pProcesses->ProcessId, pszProcessName, CreateTime_str, lParam))

break;
#else
CHAR szProcessName [MAX_PATH];

WideCharToMultiByte (CP_ACP, 0, pszProcessName, -1,

szProcessName, MAX_PATH, NULL, NULL);
if (! pfnEnumProc (pProcesses->ProcessId, szProcessName, CreateTime_str, lParam))

break;
#endif

if (pProcesses->NextEntryDelta == 0)

break;
 // find the address of the next process structure

pProcesses = (PSYSTEM_PROCESSES) (((LPBYTE) pProcesses)

+ pProcesses->NextEntryDelta);

}
HeapFree (hHeap, 0, pBuffer);

return TRUE;

}
·                   mainfrm.cpp

#include «stdafx.h»

#include «pview.h»

#include «mainfrm.h»

#include «enumproc.h»

#include «secedit.h»
BEGIN_MESSAGE_MAP (CMainFrame, CFrameWnd)
ON_WM_CONTEXTMENU()

ON_WM_CREATE()

ON_WM_DESTROY()

ON_WM_SETFOCUS()

ON_COMMAND (ID_VIEW_REFRESH, OnViewRefresh)

ON_COMMAND (ID_VIEW_APPLICATIONS, OnViewApplications)

ON_UPDATE_COMMAND_UI (ID_VIEW_APPLICATIONS, OnViewApplications_Update)

ON_COMMAND (ID_VIEW_PROCESSES, OnViewProcesses)

ON_UPDATE_COMMAND_UI (ID_VIEW_PROCESSES, OnViewProcesses_Update)

ON_COMMAND (ID_OPTIONS_ENUMPROC_TOOLHELP, OnOptionsEnumprocToolhelp)

ON_UPDATE_COMMAND_UI (ID_OPTIONS_ENUMPROC_TOOLHELP, OnOptionsEnumprocToolhelp_Update)

ON_COMMAND (ID_OPTIONS_ENUMPROC_NTAPI, OnOptionsEnumprocNtapi)

ON_UPDATE_COMMAND_UI (ID_OPTIONS_ENUMPROC_NTAPI, OnOptionsEnumprocNtapi_Update)

ON_COMMAND (ID_OPTIONS_ENUMPROC_PERFDATA, OnOptionsEnumprocPerfdata)

ON_UPDATE_COMMAND_UI (ID_OPTIONS_ENUMPROC_PERFDATA, OnOptionsEnumprocPerfdata_Update)

ON_UPDATE_COMMAND_UI (ID_OPTIONS_DEBUG, OnOptionsDebug_Update)

ON_COMMAND (ID_OPTIONS_DEBUG, OnOptionsDebug)

ON_COMMAND (ID_OPTIONS_ENUMPROC_WMI, OnOptionsEnumprocWmi)

ON_UPDATE_COMMAND_UI (ID_OPTIONS_ENUMPROC_WMI, OnOptionsEnumprocWmi_Update)

ON_WM_TIMER()

ON_COMMAND (ID_ACTION_SECURITY, OnActionSecurity)

ON_UPDATE_COMMAND_UI (ID_ACTION_SECURITY, OnActionSecurity_Update)

ON_WM_SYSCOLORCHANGE()

ON_NOTIFY (LVN_COLUMNCLICK, AFX_IDW_PANE_FIRST, OnList_ColumnClick)

ON_NOTIFY (LVN_DELETEITEM, AFX_IDW_PANE_FIRST, OnList_DeleteItem)

ON_COMMAND (ID_ABOUT, &CMainFrame: OnAbout)

END_MESSAGE_MAP()
 // –

 // CMainFrame

CMainFrame:CMainFrame()

{

m_bProcesses = -1;

m_nSortOrder = -1;

m_nAppsSortOrder = -1;

m_bShow16Bit = FALSE;

m_hVdmDbg = NULL;

m_pfnVDMEnumTaskWOWEx = NULL;

m_pfnVDMTerminateTaskWOW = NULL;

m_hPDH = NULL;

m_hPSAPI = NULL;

m_bWmiAvailable = NULL;

m_nRefreshPeriod = UPDATE_PERIOD_NORMAL;

m_bSedAvailable = FALSE;

 //m_pfnIsAppHung = IsAppHung_SMTO;

m_dwWaitStart = 0;
m_osvi.dwOSVersionInfoSize = sizeof (m_osvi);

_VERIFY (GetVersionEx(&m_osvi));

}
 // –

 // ~CMainFrame

CMainFrame:~CMainFrame()

{

}
 // –

 // PreCreateWindow

BOOL

CMainFrame: PreCreateWindow (

CREATESTRUCT& cs

)

{

if (! CFrameWnd: PreCreateWindow(cs))

return FALSE;
cs.dwExStyle &= ~WS_EX_CLIENTEDGE;

cs.lpszClass = AfxRegisterWndClass (0, NULL, NULL,

AfxGetApp()->LoadIcon (IDR_MAINFRAME));
return TRUE;

}
 // –
void

CMainFrame: OnContextMenu (

CWnd * pWnd,

CPoint point

)

{

if (pWnd!= &m_wndView)

return;
int nSel = m_wndView. GetNextItem (-1, LVNI_SELECTED);

if (nSel == -1)

return;
if (point.x == -1 && point.y == -1)

{

RECT rect;

m_wndView. GetItemRect (nSel, &rect, LVIR_BOUNDS);

m_wndView. ClientToScreen(&rect);
point.x = rect.left + 1;

point.y = rect.bottom + 1;

}
CMenu menu;

int nMenu = m_bProcesses? 0: 1;
menu. GetSubMenu(nMenu)->TrackPopupMenu (TPM_LEFTALIGN|TPM_LEFTBUTTON,

point.x, point.y, this);

}
 // –

 // OnCreate

int

CMainFrame: OnCreate (

CREATESTRUCT * pCreateStruct

)

{

OnSysColorChange();
RECT rcEmpty;

SetRectEmpty(&rcEmpty);
if (CFrameWnd: OnCreate(pCreateStruct) == -1)

return -1;
 // create status bar

UINT nInd = ID_SEPARATOR;
if (! m_ImageList. Create (16, 16, ILC_COLOR32|ILC_MASK, 16, 16))

return -1;
 // insert the default application icon into the image list

m_ImageList. Add (LoadIcon(NULL, IDI_APPLICATION));
if (m_osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)

{

m_hVdmDbg = LoadLibrary (_T(«vdmdbg.dll»));

if (m_hVdmDbg!= NULL)

{

m_pfnVDMEnumTaskWOWEx =

(VDMENUMTASKWOWEXPROC) GetProcAddress (m_hVdmDbg,

«VDMEnumTaskWOWEx»);

m_pfnVDMTerminateTaskWOW =

(VDMTERMINATETASKINWOWPROC) GetProcAddress (m_hVdmDbg,

«VDMTerminateTaskWOW»);

}

}
m_hPSAPI = LoadLibrary (_T(«psapi.dll»));

m_hPDH = LoadLibrary (_T(«pdh.dll»));
IWbemLocator * pLocator = NULL;

HRESULT hRes = CoCreateInstance (__uuidof(WbemLocator), NULL,

CLSCTX_INPROC_SERVER,

__uuidof(IWbemLocator),

(PVOID *)&pLocator);

if (SUCCEEDED(hRes))

{

pLocator->Release();

m_bWmiAvailable = TRUE;

}

else

{

m_bWmiAvailable = FALSE;

}
m_bSedAvailable = CProcessSecInfo: IsDaclEditorAvailable();
m_nEnumProcMethod = (int) g_theApp. GetProfileInt (_T(«Settings»),

_T («EnumProcessesMethod»), ENUMPROCESSES_INVALID);
if (m_nEnumProcMethod == ENUMPROCESSES_PERFDATA &&

m_hPDH == NULL)

m_nEnumProcMethod = ENUMPROCESSES_INVALID;
if (m_nEnumProcMethod == ENUMPROCESSES_WMI &&

! m_bWmiAvailable)

m_nEnumProcMethod = ENUMPROCESSES_INVALID;
if (m_nEnumProcMethod == ENUMPROCESSES_INVALID)

{

if (m_osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)

m_nEnumProcMethod = ENUMPROCESSES_TOOLHELP;

else

m_nEnumProcMethod = ENUMPROCESSES_NTAPI;

}
int bProcesses = (int) g_theApp. GetProfileInt (_T(«Settings»),                           _T («ProcessesMode»), 1);

m_nSortOrder = (int) g_theApp. GetProfileInt (_T(«Settings»),

_T («ProcessesSortOrder»), -1);

m_nAppsSortOrder = (int) g_theApp. GetProfileInt (_T(«Settings»),

_T («ApplicationsSortOrder»), -1);

m_bShow16Bit = (BOOL) g_theApp. GetProfileInt (_T(«Settings»),

_T («Show16Bit»), FALSE);
if (m_pfnVDMEnumTaskWOWEx == NULL ||

m_pfnVDMTerminateTaskWOW == NULL)

m_bShow16Bit = FALSE;
m_nRefreshPeriod = g_theApp. GetProfileInt (_T(«Settings»),                            _T («UpdateSpeed»), UPDATE_PERIOD_NORMAL);
if (m_nRefreshPeriod!= UPDATE_PERIOD_PAUSED)

SetTimer (1, m_nRefreshPeriod, NULL);
int bHung = (int) g_theApp. GetProfileInt (_T(«Settings»),_T («IsAppHung»), 0);
PBYTE pData = NULL;

UINT cbData = 0;

int * pnValues = NULL;
if (g_theApp. GetProfileBinary (_T(«Settings»), _T («ListView»),

&pData, &cbData))

{

if (cbData == 8 * sizeof(int))

{

pnValues = (int *) pData;

m_nProcColWidth[0] = pnValues[0];

m_nProcColWidth[1] = pnValues[1];

m_nAppsColWidth[0] = pnValues[2];

m_nAppsColWidth[1] = pnValues[3];

m_nProcColOrder[0] = pnValues[4];

m_nProcColOrder[1] = pnValues[5];

m_nAppsColOrder[0] = pnValues[6];

m_nAppsColOrder[1] = pnValues[7];

}

delete[] pData;

}
if (pnValues == NULL)

{

m_nProcColWidth[0] = LVSCW_AUTOSIZE_USEHEADER;

m_nProcColWidth[1] = LVSCW_AUTOSIZE_USEHEADER;

m_nAppsColWidth[0] = LVSCW_AUTOSIZE_USEHEADER;

m_nAppsColWidth[1] = LVSCW_AUTOSIZE_USEHEADER;

m_nProcColOrder[0] = 0;

m_nProcColOrder[1] = 1;

m_nAppsColOrder[0] = 0;

m_nAppsColOrder[1] = 1;

}
if (bProcesses)

OnViewProcesses();

else

OnViewApplications();

return 0;

}
 // –

 // OnDestroy

void

CMainFrame: OnDestroy()

{

SaveViewSettings();
g_theApp. WriteProfileInt (_T(«Settings»), _T («EnumProcessesMethod»),

m_nEnumProcMethod);

g_theApp. WriteProfileInt (_T(«Settings»), _T («ProcessesMode»),

m_bProcesses);

g_theApp. WriteProfileInt (_T(«Settings»), _T («ProcessesSortOrder»),

m_nSortOrder);

g_theApp. WriteProfileInt (_T(«Settings»), _T («ApplicationsSortOrder»),

m_nAppsSortOrder);

g_theApp. WriteProfileInt (_T(«Settings»), _T («Show16Bit»),

m_bShow16Bit);

g_theApp. WriteProfileInt (_T(«Settings»), _T («UpdateSpeed»),

m_nRefreshPeriod);
int nValues[8];

nValues[0] = m_nProcColWidth[0];

nValues[1] = m_nProcColWidth[1];

nValues[2] = m_nAppsColWidth[0];

nValues[3] = m_nAppsColWidth[1];

nValues[4] = m_nProcColOrder[0];

nValues[5] = m_nProcColOrder[1];

nValues[6] = m_nAppsColOrder[0];

nValues[7] = m_nAppsColOrder[1];
g_theApp. WriteProfileBinary (_T(«Settings»), _T («ListView»),

(LPBYTE) nValues, sizeof(nValues));
if (m_hVdmDbg!= NULL)

_VERIFY (FreeLibrary(m_hVdmDbg));
m_hVdmDbg = NULL;

m_pfnVDMEnumTaskWOWEx = NULL;

m_pfnVDMTerminateTaskWOW = NULL;
if (m_hPSAPI!= NULL)

_VERIFY (FreeLibrary(m_hPSAPI));
if (m_hPDH!= NULL)

    продолжение
--PAGE_BREAK--
еще рефераты
Еще работы по информатике