不同的进程真的不能够拥有相同的PID么?我相信大部分人都会说,这是不可能的,因为PID是在操作系统中表示进程的唯一性标示,因此不可能出现不同的进程拥有相同的PID,否则在系统调度的时候就会出现混乱。可是真的是这样么?有这样一个程序xxxx,当我们用xxx工具来观察系统中的pid。我们发现,在这个程序运行时,系统中竟然出现了不同的进程拥有了相同的pid。这是为什么?我们的理解与我们看到的现象竟然出现了矛盾。 首先让我们来了解一下EPROCESS结构。每个Windows 2000进程都由一个执行程序进程(EPROCESS)块表示,也就是说在内核中,进程是靠EPROCESS来识别的.下面是EPROCESS的结构定义 typedef struct _EPROCESS { KPROCESS Pcb; NTSTATUS ExitStatus; KEVENT LockEvent; ULONG LockCount; LARGE_INTEGER CreateTime; LARGE_INTEGER ExitTime; PKTHREAD LockOwner;
HANDLE UniqueProcessId;
LIST_ENTRY ActiveProcessLinks;
SIZE_T QuotaPeakPoolUsage[2]; SIZE_T QuotaPoolUsage[2];
SIZE_T PagefileUsage; SIZE_T CommitCharge; SIZE_T PeakPagefileUsage;
SIZE_T PeakVirtualSize; SIZE_T VirtualSize;
MMSUPPORT Vm; LIST_ENTRY SessionProcessLinks;
PVOID DebugPort; PVOID ExceptionPort; PHANDLE_TABLE ObjectTable;
PACCESS_TOKEN Token;
FAST_MUTEX WorkingSetLock; PFN_NUMBER WorkingSetPage; BOOLEAN ProcessOutswapEnabled; BOOLEAN ProcessOutswapped; UCHAR AddressSpaceInitialized; BOOLEAN AddressSpaceDeleted; FAST_MUTEX AddressCreationLock; KSPIN_LOCK HyperSpaceLock; struct _ETHREAD *ForkInProgress; USHORT VmOperation; UCHAR ForkWasSuccessful; UCHAR MmAgressiveWsTrimMask; PKEVENT VmOperationEvent; PVOID PaeTop; ULONG LastFaultCount; ULONG ModifiedPageCount; PVOID VadRoot; PVOID VadHint; PVOID CloneRoot; PFN_NUMBER NumberOfPrivatePages; PFN_NUMBER NumberOfLockedPages; USHORT NextPageColor; BOOLEAN ExitProcessCalled;
上一篇:如何编写高性能的应用程序
下一篇:组件编程之TypeConverterAttribute
|