typedef struct tagMODULEENTRY32 {
DWORD dwSize;
DWORD th32ModuleID;
DWORD th32ProcessID;
DWORD GlblcntUsage;
DWORD ProccntUsage;
BYTE* modBaseAddr;
DWORD modBaseSize;
HMODULE hModule;
TCHAR szModule[MAX_MODULE_NAME32 + 1];
TCHAR szExePath[MAX_PATH];
} MODULEENTRY32, *PMODULEENTRY32;
Toolhelp32
Я что-то запуталась.
у нас есть тип TProcessEntry32 и тип TModuleEntry32
я не пойму что такое th32ModuleID в первом случае. Пожалуйста помогите разобраться!:(
Правильно ли то, что один процесс может быть владельцем только одного модуля? или нет?
Цитата:
Originally posted by Golar
есть тип TProcessEntry32 и тип TModuleEntry32
я не пойму что такое th32ModuleID в первом случае.
есть тип TProcessEntry32 и тип TModuleEntry32
я не пойму что такое th32ModuleID в первом случае.
th32ModuleID - идентификатор процесса принадлежащий модулю. Причём этот идентификатор действителен только для ToolHelp ф-ций. Как я понял, это что-то вроде порядкового номера модуля в данном процессе. Т.е., практически безполезный праметр...
Цитата из SDK:
Цитата:
MODULEENTRY32
Describes an entry from a list that enumerates the modules used by a specified process.
Код:
Members
dwSize - Size of the structure, in bytes. Before calling the Module32First function, set this member to sizeof(MODULEENTRY32). If you do not initialize dwSize, Module32First will fail.
th32ModuleID - Module identifier in the context of the owning process. The contents of this member has meaning only to the tool help functions. It is not a handle, nor is it usable by functions other than the ToolHelp functions.
th32ProcessID - Identifier of the process to be examined.
GlblcntUsage - Global usage count on the module.
ProccntUsage - Module usage count in the context of the owning process.
modBaseAddr - Base address of the module in the context of the owning process.
modBaseSize - Size of the module, in bytes.
hModule - Handle to the module in the context of the owning process.
szModule - Pointer to a null-terminated string that specifies the module name.
szExePath - Pointer to a null-terminated string that specifies the module path.
Note
The modBaseAddr and hModule members are valid only in the context of the process specified by th32ProcessID.
Цитата:
PROCESSENTRY32
Describes an entry from a list that enumerates the processes residing in the system address space when a snapshot was taken.
Код:
typedef struct tagPROCESSENTRY32 {
DWORD dwSize;
DWORD cntUsage;
DWORD th32ProcessID;
ULONG_PTR th32DefaultHeapID;
DWORD th32ModuleID;
DWORD cntThreads;
DWORD th32ParentProcessID;
LONG pcPriClassBase;
DWORD dwFlags;
TCHAR szExeFile[MAX_PATH];
} PROCESSENTRY32, *PPROCESSENTRY32;
DWORD dwSize;
DWORD cntUsage;
DWORD th32ProcessID;
ULONG_PTR th32DefaultHeapID;
DWORD th32ModuleID;
DWORD cntThreads;
DWORD th32ParentProcessID;
LONG pcPriClassBase;
DWORD dwFlags;
TCHAR szExeFile[MAX_PATH];
} PROCESSENTRY32, *PPROCESSENTRY32;
Members
dwSize - Size of the structure, in bytes. Before calling the Process32First function, set this member to sizeof (PROCESSENTRY32). If you do not initialize dwSize, Process32First will fail.
cntUsage - Number of references to the process. A process exists as long as its usage count is nonzero. As soon as its usage count becomes zero, a process terminates.
th32ProcessID - Identifier of the process.
th32DefaultHeapID - Identifier of the default heap for the process. The contents of this member has meaning only to the tool help functions. It is not a handle, nor is it usable by functions other than the ToolHelp functions.
th32ModuleID - Module identifier of the process. The contents of this member has meaning only to the tool help functions. It is not a handle, nor is it usable by functions other than the ToolHelp functions.
cntThreads - Number of execution threads started by the process.
th32ParentProcessID - Identifier of the process that created the process being examined.
pcPriClassBase - Base priority of any threads created by this process.
dwFlags - Reserved; do not use.
szExeFile - Pointer to a null-terminated string that specifies the name of the executable file for the process.
Windows Me/98/95: The file name includes the path.
Цитата:
Originally posted by Golar
Правильно ли то, что один процесс может быть владельцем только одного модуля? или нет?
Правильно ли то, что один процесс может быть владельцем только одного модуля? или нет?
Некорректный вопрос. Модули - это загруженные в адресное пространство процесса библиотеки (dll, ocx, ...). Их много, обычно очень много. Но процесс, в которые они загружены, не является их владельцем, т.к. эти же библиотеки в этоже время могут использоваться и др. процессами.
Спасибо, я уже разобралась, ясно, что вопрос некорректный - потому и мучилась с ним (так вопрос был поставлен преподавателем)