.


:




:

































 

 

 

 





. JobMgt.c, .

, 6.4, Get JobNumber. , , . . , . , .

6.4. JobMgt:

/* . */

#include "EvryThng.h"

#include "JobMgt.h" /* . */

void GetJobMgtFileName (LPTSTR);

 

LONG GetJobNumber(PROCESS_INFORMATION *pProcessInfo, LPCTSTR Command)

/* . */

{

HANDLE hJobData, hProcess;

JM_JOB JobRecord;

DWORD JobNumber = 0, nXfer, ExitCode, FsLow, FsHigh;

TCHAR JobMgtFileName[MAX_PATH];

OVERLAPPED RegionStart;

if (!GetJobMgtFileName(JobMgtFileName)) return 1;

/* "\tmp\UserName.JobMgt" */

hJobData = CreateFile(JobMgtFileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

if (hJobData == INVALID_HANDLE_VALUE) return 1;

/* . */

RegionStart.Offset = 0;

RegionStart.OffsetHigh = 0;

RegionStart.hEvent = (HANDLE)0;

FsLow = GetFileSize(hJobData, &FsHigh);

LockFileEx(hJobData, LOCKFILE_EXCLUSIVE_LOCK, 0, FsLow + SJM_JOB, 0, &RegionStart);

__try {

/* . */

while(ReadFile(hJobData, &JobRecord, SJM_JOB, &nXfer, NULL) && (nXfer > 0)) {

if (JobRecord.ProcessId == 0) break;

hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, JobRecord.ProcessId);

if (hProcess == NULL) break;

if (GetExitCodeProcess(hProcess, &ExitCode) && (ExitCode!= STILL_ACTIVE)) break;

JobNumber++;

}

/* , . */

if (nXfer!= 0) /* . . */

SetFilePointer(hJobData, (LONG)SJM_JOB, NULL, FILE_CURRENT);

JobRecord.ProcessId = pProcessInfo->dwProcessId;

_tcsnccpy(JobRecord.CommandLine, Command, MAX_PATH);

WriteFile(hJobData, &JobRecord, SJM_JOB, &nXfer, NULL);

} /* try-. */

__finally {

UnlockFileEx(hJobData, 0, FsLow + SJM_JOB, 0, &RegionStart);

CloseHandle(hJobData);

}

return JobNumber + 1;

}





:


: 2015-09-20; !; : 408 |


:

:

, ,
==> ...

1539 - | 1522 -


© 2015-2024 lektsii.org - -

: 0.013 .