Red de conocimiento informático - Problemas con los teléfonos móviles - Administrador de tareas de Windows

Administrador de tareas de Windows

Creo que todo el mundo está familiarizado con el Administrador de tareas (Taskmgr) incluido en Windows 2000/XP. En comparación, el de XP es más potente que el de 2000 y la información devuelta es más detallada. ¿Crees que hay mucha información que te gustaría saber y que no está incluida? ¿Cree que la caja de herramientas de administración del sistema de Windows está demasiado dispersa? Echemos un vistazo a sus principios de desarrollo e implementemos un administrador de tareas real. Ahora llamamos a Win32API para implementar estas funciones, pero todos dicen que MS oculta demasiados detalles. Hablaremos más sobre el kernel de Windows en el futuro.

Quizás la función más familiar del Administrador de tareas es la gestión de procesos. A menudo, cuando sospechamos que tenemos un virus/caballo de Troya, comprobamos si hay algún proceso especial ejecutándose en el Administrador de tareas. , por lo que el visor de procesos debería ser una característica muy importante. Además de obtener el nombre del proceso, ¿qué más necesitamos? Por supuesto, incluye su identificador de proceso (ProcessID), información de usuario (UserName), tiempo de uso de la CPU (CPUTime) y uso de memoria (MemoryUsage), así como su prioridad (BasePriority).

La información de la CPU y la memoria puede ayudarnos a analizar el estado de ejecución del proceso, y la prioridad puede indicar la prioridad del proceso cuando la CPU asigna el uso del procesador. Esta es información general del proceso, veamos otra información. El identificador del proceso principal (ID del proceso principal), la hora de creación (Create Time), el nombre del programa, etc. del proceso también son información que nos interesa en muchos casos. Echemos un vistazo a la información de rendimiento relacionada con el proceso. Generalmente hay dos modos en Windows: modo kernel (Kernel: Nivel 0) y modo usuario (Usuario: Nivel 3). El proceso a menudo alterna entre los dos modos, por lo que puede obtener el uso del proceso en modo kernel. y modo de usuario. También incluye información sobre el conjunto de trabajo relacionado con el proceso (WorkingSet), el grupo paginado (PaggedPool), el grupo no paginado (NonePaggedPool) y el archivo de paginación (PageFile). Las operaciones de E/S relacionadas con el proceso incluyen lectura/escritura/otras acciones, y podemos obtener el número de estas operaciones y la cantidad de datos transferidos.

Si sospechas que un proceso es un troyano, ¿qué otra información te gustaría obtener? ¡Un simple nombre de proceso no debería ser suficiente! Esperamos obtener la ruta del programa real del proceso, que puede ayudarnos a determinar qué programa se está ejecutando. Hace algún tiempo, no discutimos qué procesos están ocultos. Uno de ellos es "crear subprocesos remotos" y, a menudo, existen notas en forma de bibliotecas de enlaces dinámicos (DLL). Queremos ver qué contiene un proceso específico. (Los módulos) suelen ser archivos DLL. "Subproceso" es un nombre con el que todo el mundo está familiarizado. Es la implementación en el sistema Windows y el proceso es el entorno en el que se ejecutan los subprocesos. ¿Cuántos hilos son creados por un proceso? También podemos enumerar toda la información del hilo dentro del proceso. Si encuentra un proceso troyano, la siguiente acción debería ser analizar su mecanismo operativo (si está interesado en él), pero al final aún tendrá que eliminarlo. En Windows 2k, muchos procesos críticos del sistema no se pueden finalizar en TaskMgr, pero no tiene que preocuparse ahora. Bien, por supuesto, la operación del proceso incluye finalizar el proceso. Si ha utilizado XP chino, ¿se ha encontrado a menudo con la situación de "muerte suspendida" en la barra de tareas? Aunque su computadora no se ha colgado, no puede moverse. Bueno, también podemos colgar cualquier proceso, sin importar la acción que desee. toma (excepto el final), no tendrá ninguna reacción. Con un proceso suspendido, también podemos activar el proceso desde el estado "suspendido".

La ventana del escritorio es la interfaz interactiva con la que todos entran más en contacto. ¿Quieres obtener la información del título de cada ventana? Por supuesto, también podemos obtener las propiedades del proceso, el subproceso y el identificador de ventana asociados con la ventana. Si está familiarizado con VC, debe conocer una de las herramientas SPY, que puede obtener información detallada sobre las ventanas, procesos y subprocesos del escritorio. Pero ahora no tiene que abrir esto, abra aquello, ¡ya está todo! El rendimiento del sistema es un tema que preocupa a todos los usuarios. (Recordatorio amistoso: hay muchos consejos en la columna Desarrollo de Windows de la red de desarrolladores) Incluye la cantidad de identificadores, procesos y subprocesos creados actualmente por todo el sistema. También están la cantidad total y el uso de la memoria física (memoria física), el tamaño de la caché del sistema (caché del sistema), la retención de memoria y el estado de confirmación (cargo de confirmación) y, por supuesto, el uso del grupo central paginado/no paginado. (Memoria del kernel) Condición. Contiene casi la mayor parte de la información sobre la gestión de memoria en sistemas Windows.

Aunque el precio de los discos duros ahora es muy bajo, todavía uso Xiaodong 6.4G, por lo que a menudo me encuentro con "Disco bajo". A menudo necesitamos verificar el uso del disco duro, pero es demasiado problemático ingresar a mi computadora cada vez. Y ahora podemos conocer la capacidad y el uso actual de todos los discos a la vez, así como su tipo de formato (como FAT, NTFS, CDFS, etc.) y etiquetas de disco.

Hablando del bloque de entorno, es posible que no estés tan familiarizado con él. Contiene algunas variables de entorno y cada variable de entorno corresponde a una o más cadenas. Puedes ir a SISTEMA/Avanzado en el panel de control. . ), incluida la adición de nuevas variables de entorno, la eliminación y edición de variables de entorno del sistema.

Los registros de eventos nos son de gran ayuda a la hora de analizar el uso del sistema. Hay tres tipos de registro de eventos: aplicación, sistema y seguridad. Cada evento correspondiente se puede dividir en varios tipos, que son información general, advertencias y errores. Estos incluyen número de registro (Número de registro), tipo de evento (Tipo), identificador (ID de evento), fuente (Fuente), hora de generación (Tiempo generado), nombre de usuario (Usuario) e información de descripción relacionada (Descripción). Si tiene tiempo, puede leer más información sobre eventos. Por supuesto, todos los administradores de red deberían estar familiarizados con ellos, pero también incluye otra información de registro de eventos.

A menudo uso el comando ipconfig /all en el sistema Windows porque usamos DHCP. Está bien verificar si su dirección IP ha cambiado. Incluye información detallada del adaptador de red, incluido el nombre del adaptador, la descripción, la dirección y el tipo de hardware, la dirección IP y la máscara de subred correspondiente, la puerta de enlace y la dirección del servidor DHCP, etc. (Recordatorio: hay muchos consejos en la columna Desarrollo de Windows de la red de desarrolladores) ¿Pero también está interesado en el tráfico de la red? Por supuesto, podemos obtener cuántos datagramas (no) de transmisión aceptó/envió el host, cuántos errores ocurrieron y cuánta información recibió/envió el host. Todas estas son información útil para todos los internautas.

El uso compartido de redes es a menudo a lo que todos prestan atención: cuánta información ha compartido, cuáles son las rutas de sus archivos y el tipo de información que comparten. Cuando no necesitemos cierta información compartida, por supuesto no debemos olvidarnos de eliminarla para evitar que se filtre nuestra información confidencial.

Windows NT es un sistema multiusuario que permite la existencia de múltiples tipos de usuarios.

Esperamos obtener el período de uso de la cuenta de usuario (Contraseña caducada). Recuerde cambiar la contraseña del usuario de vez en cuando, así como el identificador de usuario (ID de usuario), el identificador de grupo (ID de grupo) y el tipo de cuenta. cuenta de usuario (Tipo), diferentes tipos tienen diferentes permisos, ¡por supuesto que esperamos tener la máxima autoridad! También nos resulta útil analizar el uso del usuario para ver si el sistema tiene restricciones en el uso del espacio en disco de una determinada cuenta (Almacenamiento máximo), la cantidad de inicios de sesión de la cuenta (Número de inicios de sesión) y la información del tiempo de inicio de sesión (Horas de inicio de sesión). .

La información del controlador del dispositivo y del servicio Win32 del sistema también es muy importante. Esperamos detectar la ruta específica, el estado, el tipo, el método de inicio y otra información de cada programa de inicio del servicio/dispositivo. También queremos tener control sobre el servicio, como detener, iniciar y eliminar operaciones. Puede consultar "Un breve análisis de los servicios y la tecnología de puerta trasera de Windows 2000/XP" para obtener más información sobre los servicios Win32.

El apagado no es tan monótono. Puedes cerrar sesión en tu sistema. Por supuesto, debes bloquearlo si quieres salir. Recientemente, a nadie le gusta apagar, es demasiado problemático, por lo que están acostumbrados a usar la hibernación. El sistema retendrá la información actual para nosotros, pero también hay apagado e hibernación que admiten la administración de energía. Atención, usuarios de Windows 2000, también podemos usar las funciones de apagado y reinicio con cronometraje y mensajes en el sistema XP.

La información de la versión del sistema es relativamente fija e incluye principalmente la huella digital del sistema operativo, la organización/usuario registrado, el nombre del host y los directorios relacionados con el sistema y otra información.

Habiendo dicho todo esto, es hora de que hablemos de cómo implementarlo.

1. Información de la ventana

MS nos proporciona funciones para abrir un escritorio específico y enumerar las ventanas del escritorio.

hDesk=OpenDesktop(lpszDesktop, 0, FALSE, DESKTOP_ENUMERATE);

//Abrir nuestro escritorio predeterminado

EnumDesktopWindows(hDesk, (WNDENUMPROC) EnumWindowProc; , 0);

//Enumerar todas las ventanas abiertas en el escritorio, implementadas por la función de devolución de llamada.

BOOL __stdcall EnumWindowProc(HWND, LPARAM);

//En la función de devolución de llamada, podemos obtener el título de la ventana y la información relacionada del proceso y del hilo;

GetWindowText(hWnd, szWindowText, dwMaxCount);

GetWindowThreadProcessId(hWnd, & dwPID);

2. repítalos aquí)

La información del controlador del dispositivo es administrada por el Administrador de control de servicios (SCM). Quiero abrir el Administrador de control de servicios y enumerar todos los controladores de dispositivos.

OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);

//Abre el administrador de control de servicios con todos los permisos;

EnumServicesStatus(schManager, dwDeviceType, dwDeviceState,

EnumStatus, dwBufSize, amp; dwBytesNeeded,

amp; dwDevicesReturned, amp; dwResumeHandle))

//Enumerar el estado actual de todos los dispositivos;

CloseServiceHandle(schManager);

//Recuerde cerrar el identificador de servicio después de completar el acceso;

OpenService(schManager, szDeviceName, SERVICE_ALL_ACCESS);

//Abrir un controlador de dispositivo específico;

QueryServiceConfig(schDevice, lpDeviceConfig,

1024*8, amp; dwBytesNeeded);

//Consultar el información de configuración del servicio del controlador;

QueryServiceStatus(schDevice, amp; DeviceStatus);

//Consulta el estado actual del controlador del dispositivo (Recordatorio amistoso: también hay un Windows; columna de desarrollo en la red de desarrolladores Hay muchos trucos)

QueryServiceConfig2(schDevice, SERVICE_CONFIG_DESCRIPTION,

(LPBYTE)lpDeviceDescription, 8*1024, amp; dwBytesNeeded)

//Consulta la descripción de la información del dispositivo

StartService(schDevice, 0, NULL);

//Inicia el dispositivo

ControlService; (schDevice, SERVICE_CONTROL_STOP, y DeviceStatus);

p>

//Detener el dispositivo;

DeleteService(schDevice);

//Eliminar el dispositivo

3. Información del disco

Esperamos obtener información sobre todos los discos del sistema, incluidos disquetes, discos duros, discos ópticos, etc.;

GetLogicalDriveStrings(dwBufferLength, lpBuffer);

//Obtener información sobre dispositivos lógicos;

GetVolumeInformation(lpRootPathName, lpVolumeNameBuffer,

dwVolumeNameSize, amp; dwVolumeSerialNumber ,

amp; dwMaximumComponentLength, amp; dwFileSystemFlags,

lpFileSystemNameBuffer, dwFileSystemNameSize );

//Obtener información del volumen del disco, incluido el nombre del volumen y el tipo de formato ( Recordatorio amistoso: hay muchos consejos en la columna de desarrollo de Windows de Developer Network)

GetDiskFreeSpaceEx(lpRootPathName, amp;FreeByte

sAvailable,

amp; TotalNumberOfBytes, amp; TotalNumberOfFreeBytes);

//Detectar uso de espacio en disco

4. Podemos obtener la información del bloque de entorno del registro: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment, por supuesto usando la función de registro.

RegOpenKeyEx(HKEY_LOCAL_MACHINE, RegKey, 0, KEY_QUERY_VALUE, & hKey);

//Abre la clave de registro

RegEnumValue(hKey, dwIndex, EnvironVariable,

amp; dwVariableLength, NULL, NULL, NULL, NULL);

//Consulta el valor de información que necesitamos

GetEnvironmentVariable(EnvironVariable, EnvironString, 1024; );

//Obtener la información de cadena de la variable de entorno

5. Información del registro de eventos

OpenEventLog(NULL, szLog);

//Registro de tiempo abierto;

GetOldestEventLogRecord(hEvent, amp; dwThisRecord);

//Obtenga la información de registro más reciente para continuar la búsqueda;

ReadEventLog(hEvent, EVENTLOG_FORWARDS_READ │ EVENTLOG_SEQUENTIAL_READ,

0, pEventLogRecord, 1024*32, amp; dwRead, amp; dwNeeded)

//Leer la información del registro;

p >

LookupAccountSid(NULL, pSid, szName, & dwName, szDomain, & dwDomain, & SNU);

//Obtener el SID de la cuenta para obtener el nombre de usuario de la cuenta;

GetNumberOfEventLogRecords(hEvent, amp; dwTotal);

//Obtener el número total de registros de eventos;

CloseEventLog(hEvent);

/ /No olvide cerrar el controlador de eventos;

6. Compartir red

Utilizamos la búsqueda de uso compartido de red de segundo nivel

NetShareEnum; ( NULL, dwLevel, (PBYTE *)&pBuf, MAX_PREFERRED_LENGTH, entradas leídas, entradas totales, currículum);

//Enumere todos los *directorios compartidos e información relacionada;

// p>

NetApiBufferFree(pBuf);

//Libera el búfer (Recordatorio: hay muchos consejos en la columna de desarrollo de Windows de la red de desarrolladores)

NetShareDel(NULL, ( char *)lpShareNameW, 0);

//Eliminar el directorio compartido de red;

7. Información del adaptador de red

Queremos detectar la información de la NIC y tráfico de red;

GetAdaptersInfo(amp;AdapterInfo,amp;OutBufLen);

//Obtener información del adaptador

8. p>Obtener el uso de memoria del sistema;

GetPerformanceInfo(amp;PerfInfo, sizeof(PERFORMACE_INFORMATION))

//Obtener la información de rendimiento del sistema

9

.Información de proceso/hilo/módulo

Aquí utilizamos la función de ayuda de la herramienta (ToolHelp32) y el sistema

OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY │ TOKEN_ADJUST_PRIVILEGES, amp; hToken);

p>

//Abrir el token del proceso y elevar los permisos;

AdjustTokenPrivileges(hToken, FALSE, amp; TokenPrivileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL);

//Elevar los permisos del proceso para soportar la depuración (Debug);

CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

//Crear una instantánea del proceso;

Process32First (hProcessSnap, y ProcessEntry32);

Process32First (hProcessSnap, y ProcessEntry32

//Enumerar todos los procesos; p>OpenProcess(PROCESS_QUERY_INFORMATION, FALSE , ProcessEntry32.th32ProcessID);

//Abre un proceso específico para consultar información relacionada con el proceso;

GetProcessTimes(hProcess, amp; CreateTime, amp; ExitTime, amp; KernelTime, amp; UserTime);

//Obtener la información de tiempo del proceso

GetProcessMemoryInfo(hProcess, amp; PMCounter, sizeof(PMCounter));

//Obtener la información del área de almacenamiento del proceso;

GetPriorityClass(hProcess);

//Obtener la prioridad del proceso;

GetProcessIoCounters(hProcess, amp; IoCounters);

// p>

//Obtener el uso de IO del proceso;

CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID);

//Crear instantánea del módulo (Recordatorio amigable: Red de desarrolladores Desarrollo de Windows Hay muchos consejos en la columna)

Module32First(hModuleSnap, amp; ModuleEntry32); >Module32Next(hModuleSnap, amp; ModuleEntry32);

//Información del módulo del proceso de enumeración;

CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);

//Crear instantánea del hilo ;

Thread32First(hThreadSnap, amp; ThreadEntry32);

Thread32Next(hThreadSnap, amp; ThreadEntry32);

//Enumerar información del hilo;

OpenThread(THREAD_ALL_ACCESS, FALSE, ThreadEntry32.th

32ThreadID);

//Para abrir un hilo, debes obtener la dirección de esta función tú mismo;

TerminateProcess(hProcess, 0);

// Terminar el proceso;

p>

SuspendThread(hThread);

//Suspensión del hilo

ResumeThread(hThread); p>//Activar hilo;

10. Apagar

AjustarTokenPrivileges(hToken, FALSE, amp;TokenPrivileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL);

//Ajuste el token de proceso para admitir el apagado;

Salir de WindowsEx(EWX_LOGOFF, 0);

//Cerrar sesión en el sistema;

LockWorkStation() ;

//Bloquear el sistema ;

InitiateSystemShutdown(NULL, szMessage, dwTimeout, FALSE, bSig);

//Admite apagado/reinicio según sincronización y visualización de mensajes;

SetSystemPowerState (bSig, FALSE);

//suspensión/hibernación del sistema

11. (NULL, dwLevel, FILTER_NORMAL_ACCOUNT, (LPBYTE*) y pBuf,

dwPrefMaxLen, y dwEntriesRead, y dwTotalEntries, y dwResumeHandle//Enumerar la información del usuario del sistema); ;

NetUserDel( NULL, lpUserNameW);

//Eliminar el usuario especificado

12. (LPOSVERSIONINFO)&osviex);

//Obtener la información de la versión del sistema operativo;

También podemos obtener información relevante a través del registro (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\ CurrentVersion):

GetTickCount ();

//Obtener la hora de inicio;

GetComputerName(szInfo, amp; dwInfo);

//Obtener el nombre de la computadora;

GetUserName(szInfo, amp; dwInfo);

//Obtener el nombre de usuario de la computadora;

GetWindowsDirectory(szInfo, MAX_PATH 1);

//Obtener el directorio de Windows;

GetSystemDirectory(szInfo, MAX_PATH 1);

//Obtener el directorio del sistema;

Resumen:

Aunque ahora se han implementado todas las funciones del Administrador de tareas y son incluso más poderosas que las que vienen con Windows, no hay sensación de emoción.

Porque si observa nuestro código, encontrará que esas son funciones de Win32API que se llaman directamente, pero ¿sabemos cómo se implementa el sistema subyacente? Ya sea que estemos simplemente tratando de implementar una función o estemos interesados ​​en el sistema operativo, deberíamos investigar más en la capa inferior del sistema, no solo en los programadores que solo pueden usar funciones de alto nivel. Aunque Microsoft nos ha ocultado muchos detalles internos, es este secreto subyacente el que inspira nuestro interés y motivación para realizar una investigación en profundidad.