2012-01-03 26 views
6

Tôi cần liệt kê tất cả các chốt mở trong quy trình hiện tại. Vì tôi không thể tìm thấy bất kỳ chức năng nào như "EnumHandles", tôi đã nghĩ đến việc tạo vòng lặp từ 0 đến 1000. Câu hỏi đặt ra là làm thế nào tôi có thể lấy tên của mỗi tay cầm? Tôi đang sử dụng c + + và hệ điều hành là Win7 32-bit EDIT: Tay cầm tôi cần tên là Mutex. Bằng cách so sánh tên của mutex, tôi muốn lấy id xử lý Tôi dường như đã tìm thấy giải pháp bằng cách sử dụng OpenMutex, nhưng tôi không biết phải truyền thông số thứ 3,Lấy tên của tất cả các chốt trong quy trình hiện tại

+2

Bạn có ý nghĩa gì với "tên của mỗi tay cầm"? Xử lý không có tên. Bạn có nghĩa là id xử lý, các lớp cửa sổ tương ứng hoặc tiêu đề văn bản? –

+0

Không phải tất cả các xử lý đều đề cập đến các tệp có tên. Bạn đã xem xét xem Process Explorer chưa? –

+0

Cách tiếp cận đó sẽ không hoạt động. Loại xử lý nào? – SLaks

Trả lời

5

Tôi tin rằng bạn phải sử dụng NTDLL.DLL. Theo hiểu biết của tôi, đây là tất cả các công cụ giám sát quy trình, xử lý và thông tin hệ thống khác, phải sử dụng cuối cùng, trong Windows. Tôi sử dụng nó trong một công cụ Win32 nhỏ, tuy nhiên không bao giờ phải liệt kê xử lý.

Kiểm tra ở đây để có phần giới thiệu tốt về thư viện đó và liên quan đến câu hỏi của bạn. http://forum.sysinternals.com/howto-enumerate-handles_topic18892.html

Ngoài chức năng GetObjectName trong bài viết đầu tiên của http://forum.sysinternals.com/enumerate-opened-files_topic3577.html

Tiếp cận loại thông tin này trong Windows có thể dường như là rất nhiều công việc và trông đáng sợ bởi vì Microsoft không muốn để hỗ trợ nó, nhưng bạn sẽ thấy rằng khi API 'dễ dàng' không cung cấp cho bạn những gì bạn cần, bạn phải đào sâu đến NTDLL. Đây là những công cụ như ProcessExplorer sử dụng cuối cùng. Nó không phải là khó khăn như vậy để sử dụng: tải DLL, có được con trỏ chức năng đúng để điền vào các cấu trúc mà bạn tuyên bố mình với những gì bạn sẽ tìm thấy trên mạng.

+0

Tôi không cố vấn quy trình, xử lý được đặt trong quy trình hiện tại – WePro2

+0

Tôi đã giải thích rõ điều đó. Thư viện NTDLL.DLL có nghĩa là để nhận thông tin về thông tin hệ thống sâu (các quy trình, xử lý, v.v.). Đây là một DLL không có giấy tờ của Microsoft nhưng bạn có thể tìm thấy tài liệu tại các liên kết tôi đã cung cấp hoặc bằng cách googling. Bạn chỉ cần biết các cấu trúc và chức năng để gọi trong DLL. – fury

+0

Nó trông rất nhiều công việc chỉ để lấy lại tên của tay cầm. Tôi nghĩ rằng OpenMutex có thể là câu trả lời tôi đang tìm kiếm, nhưng tôi không chắc chắn nếu tôi cần phải vượt qua đường dẫn đầy đủ của mutex (\ Sessions \ 1 \ BaseNamedObjects \ somemutex) hoặc chỉ somemutex trên tham số thứ 3. Tôi đã thử cả hai nhưng không thành công – WePro2

Các vấn đề liên quan