Книга: Системное программирование в среде Windows

Поиск задачи в файле списка задач

Поиск задачи в файле списка задач

Программа 6.6 представляет последнюю функцию управления задачами, FindProcessID, которая получает идентификатор процесса, соответствующего задаче с указанным номером. В свою очередь, идентификатор процесса может использоваться вызывающей программой для получения дескриптора и другой информации о состоянии процесса.

Программа 6.6. JobMgt: получение идентификатора процесса по номеру задачи 

DWORD FindProcessId(DWORD JobNumber)
/* Получить ID процесса для задачи с указанным номером. */
{
 HANDLE hJobData;
 JM_JOB JobRecord;
 DWORD nXfer;
 TCHAR JobMgtFileName[MAX_PATH];
 OVERLAPPED RegionStart;
 /* Открыть файл управления задачами. */
 GetJobMgtFileName(JobMgtFileName);
 hJobData = CreateFile(JobMgtFileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
 if (hJobData == INVALID_HANDLE_VALUE) return 0;
 /* Перейти к позиции записи, соответствующей указанному номеру задачи.
  * В полной версии программы обеспечивается принадлежность номера задачи (JobNumber) допустимому диапазону значений. */
 SetFilePointer(hJobData, SJM_JOB * (JobNumber – 1), NULL, FILE_BEGIN);
 /* Блокировка и чтение записи. */
 RegionStart.Offset = SJM_JOB * (JobNumber – 1);
 RegionStart.OffsetHigh =0; /* Предполагаем, что файл "короткий". */
 RegionStart.hEvent = (HANDLE)0;
 LockFileEx(hJobData, 0, 0, SJM_JOB,0, &RegionStart);
 ReadFile(hJobData, &JobRecord, SJM_JOB, &nXfer, NULL);
 UnlockFileEx(hJobData, 0, SJM_JOB, 0, &RegionStart);
 CloseHandle(hJobData);
 return JobRecord.ProcessId;
}
 

Оглавление книги


Генерация: 1.732. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз