DreamineVMS
1.0.0.0
Windows PC의 RTSP·USB 카메라 영상을 HLS로 변환해 원격 CCTV Viewer에 전달하는 데스크톱 에이전트입니다.
Toggle main menu visibility
로딩중...
검색중...
일치하는것 없음
ChildProcessJob.cs
이 파일의 문서화 페이지로 가기
1
using
System;
2
using
System.Diagnostics;
3
using
System.Runtime.InteropServices;
4
using
System.Runtime.Versioning;
5
6
namespace
DreamineVMS.Services.Streaming
;
7
24
[SupportedOSPlatform(
"windows"
)]
25
public
sealed
class
ChildProcessJob
: IDisposable
26
{
35
private
IntPtr
_handle
;
44
private
bool
_disposed
;
45
54
public
ChildProcessJob
()
55
{
56
_handle
=
CreateJobObject
(IntPtr.Zero,
null
);
57
if
(
_handle
== IntPtr.Zero)
58
{
59
// Job Object를 만들 수 없는 환경(권한 등)에서는 핸들이 0으로 남고,
60
// AddProcess는 무시됩니다. 이 경우 기존 동작(개별 Kill)으로 폴백됩니다.
61
return
;
62
}
63
64
JOBOBJECT_BASIC_LIMIT_INFORMATION
basicLimit =
new
()
65
{
66
LimitFlags =
JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
67
};
68
69
JOBOBJECT_EXTENDED_LIMIT_INFORMATION
extendedLimit =
new
()
70
{
71
BasicLimitInformation = basicLimit
72
};
73
74
int
length = Marshal.SizeOf<
JOBOBJECT_EXTENDED_LIMIT_INFORMATION
>();
75
IntPtr extendedPtr = Marshal.AllocHGlobal(length);
76
try
77
{
78
Marshal.StructureToPtr(extendedLimit, extendedPtr,
false
);
79
80
if
(!
SetInformationJobObject
(
81
_handle
,
82
JobObjectInfoType
.ExtendedLimitInformation,
83
extendedPtr,
84
(uint)length))
85
{
86
CloseHandle
(
_handle
);
87
_handle
= IntPtr.Zero;
88
}
89
}
90
finally
91
{
92
Marshal.FreeHGlobal(extendedPtr);
93
}
94
}
95
120
public
bool
AddProcess
(Process process)
121
{
122
ArgumentNullException.ThrowIfNull(process);
123
124
if
(
_handle
== IntPtr.Zero ||
_disposed
)
125
{
126
return
false
;
127
}
128
129
try
130
{
131
return
AssignProcessToJobObject
(
_handle
, process.Handle);
132
}
133
catch
(InvalidOperationException)
134
{
135
// 프로세스가 이미 종료된 경우 등.
136
return
false
;
137
}
138
}
139
148
public
void
Dispose
()
149
{
150
if
(
_disposed
)
151
{
152
return
;
153
}
154
155
_disposed
=
true
;
156
157
if
(
_handle
!= IntPtr.Zero)
158
{
159
CloseHandle
(
_handle
);
160
_handle
= IntPtr.Zero;
161
}
162
}
163
172
private
const
uint
JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
= 0x00002000;
173
182
private
enum
JobObjectInfoType
183
{
192
ExtendedLimitInformation
= 9
193
}
194
203
[StructLayout(LayoutKind.Sequential)]
204
private
struct
JOBOBJECT_BASIC_LIMIT_INFORMATION
205
{
214
public
long
PerProcessUserTimeLimit
;
223
public
long
PerJobUserTimeLimit
;
232
public
uint
LimitFlags
;
241
public
UIntPtr
MinimumWorkingSetSize
;
250
public
UIntPtr
MaximumWorkingSetSize
;
259
public
uint
ActiveProcessLimit
;
268
public
UIntPtr
Affinity
;
277
public
uint
PriorityClass
;
286
public
uint
SchedulingClass
;
287
}
288
297
[StructLayout(LayoutKind.Sequential)]
298
private
struct
IO_COUNTERS
299
{
308
public
ulong
ReadOperationCount
;
317
public
ulong
WriteOperationCount
;
326
public
ulong
OtherOperationCount
;
335
public
ulong
ReadTransferCount
;
344
public
ulong
WriteTransferCount
;
353
public
ulong
OtherTransferCount
;
354
}
355
364
[StructLayout(LayoutKind.Sequential)]
365
private
struct
JOBOBJECT_EXTENDED_LIMIT_INFORMATION
366
{
375
public
JOBOBJECT_BASIC_LIMIT_INFORMATION
BasicLimitInformation
;
384
public
IO_COUNTERS
IoInfo
;
393
public
UIntPtr
ProcessMemoryLimit
;
402
public
UIntPtr
JobMemoryLimit
;
411
public
UIntPtr
PeakProcessMemoryUsed
;
420
public
UIntPtr
PeakJobMemoryUsed
;
421
}
422
455
[DllImport(
"kernel32.dll"
, CharSet = CharSet.Unicode, SetLastError =
true
)]
456
private
static
extern
IntPtr
CreateJobObject
(IntPtr lpJobAttributes,
string
? lpName);
457
506
[DllImport(
"kernel32.dll"
, SetLastError =
true
)]
507
[
return
: MarshalAs(UnmanagedType.Bool)]
508
private
static
extern
bool
SetInformationJobObject
(
509
IntPtr hJob,
510
JobObjectInfoType
infoType,
511
IntPtr lpJobObjectInfo,
512
uint cbJobObjectInfoLength);
513
546
[DllImport(
"kernel32.dll"
, SetLastError =
true
)]
547
[
return
: MarshalAs(UnmanagedType.Bool)]
548
private
static
extern
bool
AssignProcessToJobObject
(IntPtr hJob, IntPtr hProcess);
549
574
[DllImport(
"kernel32.dll"
, SetLastError =
true
)]
575
[
return
: MarshalAs(UnmanagedType.Bool)]
576
private
static
extern
bool
CloseHandle
(IntPtr hObject);
577
}
DreamineVMS.Services.Streaming
Definition
ChildProcessJob.cs:6
DreamineVMS.Services.Streaming.ChildProcessJob.ChildProcessJob
ChildProcessJob()
Definition
ChildProcessJob.cs:54
DreamineVMS.Services.Streaming.ChildProcessJob.Dispose
void Dispose()
Definition
ChildProcessJob.cs:148
DreamineVMS.Services.Streaming.ChildProcessJob.AssignProcessToJobObject
static bool AssignProcessToJobObject(IntPtr hJob, IntPtr hProcess)
DreamineVMS.Services.Streaming.ChildProcessJob._disposed
bool _disposed
Definition
ChildProcessJob.cs:44
DreamineVMS.Services.Streaming.ChildProcessJob.CreateJobObject
static IntPtr CreateJobObject(IntPtr lpJobAttributes, string? lpName)
DreamineVMS.Services.Streaming.ChildProcessJob.SetInformationJobObject
static bool SetInformationJobObject(IntPtr hJob, JobObjectInfoType infoType, IntPtr lpJobObjectInfo, uint cbJobObjectInfoLength)
DreamineVMS.Services.Streaming.ChildProcessJob.CloseHandle
static bool CloseHandle(IntPtr hObject)
DreamineVMS.Services.Streaming.ChildProcessJob.JobObjectInfoType
JobObjectInfoType
Definition
ChildProcessJob.cs:183
DreamineVMS.Services.Streaming.ChildProcessJob.JobObjectInfoType.ExtendedLimitInformation
@ ExtendedLimitInformation
Definition
ChildProcessJob.cs:192
DreamineVMS.Services.Streaming.ChildProcessJob.AddProcess
bool AddProcess(Process process)
Definition
ChildProcessJob.cs:120
DreamineVMS.Services.Streaming.ChildProcessJob.JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
const uint JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
Definition
ChildProcessJob.cs:172
DreamineVMS.Services.Streaming.ChildProcessJob._handle
IntPtr _handle
Definition
ChildProcessJob.cs:35
DreamineVMS.Services.Streaming.ChildProcessJob.JOBOBJECT_BASIC_LIMIT_INFORMATION
Definition
ChildProcessJob.cs:205
DreamineVMS.Services.Streaming.ChildProcessJob.JOBOBJECT_BASIC_LIMIT_INFORMATION.LimitFlags
uint LimitFlags
Definition
ChildProcessJob.cs:232
DreamineVMS.Services.Streaming.ChildProcessJob.JOBOBJECT_BASIC_LIMIT_INFORMATION.PerProcessUserTimeLimit
long PerProcessUserTimeLimit
Definition
ChildProcessJob.cs:214
DreamineVMS.Services.Streaming.ChildProcessJob.JOBOBJECT_BASIC_LIMIT_INFORMATION.ActiveProcessLimit
uint ActiveProcessLimit
Definition
ChildProcessJob.cs:259
DreamineVMS.Services.Streaming.ChildProcessJob.JOBOBJECT_BASIC_LIMIT_INFORMATION.Affinity
UIntPtr Affinity
Definition
ChildProcessJob.cs:268
DreamineVMS.Services.Streaming.ChildProcessJob.JOBOBJECT_BASIC_LIMIT_INFORMATION.MinimumWorkingSetSize
UIntPtr MinimumWorkingSetSize
Definition
ChildProcessJob.cs:241
DreamineVMS.Services.Streaming.ChildProcessJob.JOBOBJECT_BASIC_LIMIT_INFORMATION.SchedulingClass
uint SchedulingClass
Definition
ChildProcessJob.cs:286
DreamineVMS.Services.Streaming.ChildProcessJob.JOBOBJECT_BASIC_LIMIT_INFORMATION.PerJobUserTimeLimit
long PerJobUserTimeLimit
Definition
ChildProcessJob.cs:223
DreamineVMS.Services.Streaming.ChildProcessJob.JOBOBJECT_BASIC_LIMIT_INFORMATION.PriorityClass
uint PriorityClass
Definition
ChildProcessJob.cs:277
DreamineVMS.Services.Streaming.ChildProcessJob.JOBOBJECT_BASIC_LIMIT_INFORMATION.MaximumWorkingSetSize
UIntPtr MaximumWorkingSetSize
Definition
ChildProcessJob.cs:250
DreamineVMS.Services.Streaming.ChildProcessJob.IO_COUNTERS
Definition
ChildProcessJob.cs:299
DreamineVMS.Services.Streaming.ChildProcessJob.IO_COUNTERS.ReadOperationCount
ulong ReadOperationCount
Definition
ChildProcessJob.cs:308
DreamineVMS.Services.Streaming.ChildProcessJob.IO_COUNTERS.ReadTransferCount
ulong ReadTransferCount
Definition
ChildProcessJob.cs:335
DreamineVMS.Services.Streaming.ChildProcessJob.IO_COUNTERS.WriteTransferCount
ulong WriteTransferCount
Definition
ChildProcessJob.cs:344
DreamineVMS.Services.Streaming.ChildProcessJob.IO_COUNTERS.WriteOperationCount
ulong WriteOperationCount
Definition
ChildProcessJob.cs:317
DreamineVMS.Services.Streaming.ChildProcessJob.IO_COUNTERS.OtherOperationCount
ulong OtherOperationCount
Definition
ChildProcessJob.cs:326
DreamineVMS.Services.Streaming.ChildProcessJob.IO_COUNTERS.OtherTransferCount
ulong OtherTransferCount
Definition
ChildProcessJob.cs:353
DreamineVMS.Services.Streaming.ChildProcessJob.JOBOBJECT_EXTENDED_LIMIT_INFORMATION
Definition
ChildProcessJob.cs:366
DreamineVMS.Services.Streaming.ChildProcessJob.JOBOBJECT_EXTENDED_LIMIT_INFORMATION.PeakJobMemoryUsed
UIntPtr PeakJobMemoryUsed
Definition
ChildProcessJob.cs:420
DreamineVMS.Services.Streaming.ChildProcessJob.JOBOBJECT_EXTENDED_LIMIT_INFORMATION.ProcessMemoryLimit
UIntPtr ProcessMemoryLimit
Definition
ChildProcessJob.cs:393
DreamineVMS.Services.Streaming.ChildProcessJob.JOBOBJECT_EXTENDED_LIMIT_INFORMATION.PeakProcessMemoryUsed
UIntPtr PeakProcessMemoryUsed
Definition
ChildProcessJob.cs:411
DreamineVMS.Services.Streaming.ChildProcessJob.JOBOBJECT_EXTENDED_LIMIT_INFORMATION.JobMemoryLimit
UIntPtr JobMemoryLimit
Definition
ChildProcessJob.cs:402
DreamineVMS.Services.Streaming.ChildProcessJob.JOBOBJECT_EXTENDED_LIMIT_INFORMATION.IoInfo
IO_COUNTERS IoInfo
Definition
ChildProcessJob.cs:384
DreamineVMS.Services.Streaming.ChildProcessJob.JOBOBJECT_EXTENDED_LIMIT_INFORMATION.BasicLimitInformation
JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation
Definition
ChildProcessJob.cs:375
Services
Streaming
ChildProcessJob.cs
다음에 의해 생성됨 :
1.17.0