{"id":26875,"date":"2024-03-16T07:30:58","date_gmt":"2024-03-16T07:30:58","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/"},"modified":"2024-03-22T09:39:21","modified_gmt":"2024-03-22T09:39:21","slug":"example-of-inter-process-application-monitoring-using-duplicatehandle","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/","title":{"rendered":"Example of inter-process application monitoring using DuplicateHandle"},"content":{"rendered":"<p>The DuplicateHandle function is a function provided by the Windows operating system for copying handles between processes. It can be used to monitor communication between two processes, as well as facilitate data sharing and synchronization between processes.<\/p>\n<p>Here is an example of implementing inter-process application monitoring using the DuplicateHandle function:<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include<\/span> <span class=\"hljs-string\">&lt;windows.h&gt;<\/span><\/span>\r\n<span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include<\/span> <span class=\"hljs-string\">&lt;iostream&gt;<\/span><\/span>\r\n\r\n<span class=\"hljs-function\"><span class=\"hljs-type\">int<\/span> <span class=\"hljs-title\">main<\/span><span class=\"hljs-params\">()<\/span>\r\n<\/span>{\r\n    HANDLE hProcess = <span class=\"hljs-built_in\">OpenProcess<\/span>(PROCESS_ALL_ACCESS, FALSE, <span class=\"hljs-number\">1234<\/span>); <span class=\"hljs-comment\">\/\/ \u6253\u5f00\u76ee\u6807\u8fdb\u7a0b<\/span>\r\n    <span class=\"hljs-keyword\">if<\/span> (hProcess == <span class=\"hljs-literal\">NULL<\/span>)\r\n    {\r\n        std::cout &lt;&lt; <span class=\"hljs-string\">\"Failed to open process!\"<\/span> &lt;&lt; std::endl;\r\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-number\">1<\/span>;\r\n    }\r\n\r\n    HANDLE hEvent = <span class=\"hljs-built_in\">CreateEvent<\/span>(<span class=\"hljs-literal\">NULL<\/span>, FALSE, FALSE, <span class=\"hljs-string\">\"MyEvent\"<\/span>); <span class=\"hljs-comment\">\/\/ \u521b\u5efa\u4e00\u4e2a\u4e8b\u4ef6\u5bf9\u8c61<\/span>\r\n    <span class=\"hljs-keyword\">if<\/span> (hEvent == <span class=\"hljs-literal\">NULL<\/span>)\r\n    {\r\n        std::cout &lt;&lt; <span class=\"hljs-string\">\"Failed to create event!\"<\/span> &lt;&lt; std::endl;\r\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-number\">1<\/span>;\r\n    }\r\n\r\n    HANDLE hDuplicateEvent;\r\n    <span class=\"hljs-keyword\">if<\/span> (<span class=\"hljs-built_in\">DuplicateHandle<\/span>(<span class=\"hljs-built_in\">GetCurrentProcess<\/span>(), hEvent, hProcess, &amp;hDuplicateEvent, EVENT_ALL_ACCESS, FALSE, <span class=\"hljs-number\">0<\/span>)) <span class=\"hljs-comment\">\/\/ \u590d\u5236\u4e8b\u4ef6\u53e5\u67c4\u5230\u76ee\u6807\u8fdb\u7a0b<\/span>\r\n    {\r\n        <span class=\"hljs-built_in\">WaitForSingleObject<\/span>(hDuplicateEvent, INFINITE); <span class=\"hljs-comment\">\/\/ \u7b49\u5f85\u4e8b\u4ef6\u89e6\u53d1<\/span>\r\n        std::cout &lt;&lt; <span class=\"hljs-string\">\"Event triggered in the target process!\"<\/span> &lt;&lt; std::endl;\r\n        <span class=\"hljs-built_in\">CloseHandle<\/span>(hDuplicateEvent);\r\n    }\r\n    <span class=\"hljs-keyword\">else<\/span>\r\n    {\r\n        std::cout &lt;&lt; <span class=\"hljs-string\">\"Failed to duplicate handle!\"<\/span> &lt;&lt; std::endl;\r\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-number\">1<\/span>;\r\n    }\r\n\r\n    <span class=\"hljs-built_in\">CloseHandle<\/span>(hEvent);\r\n    <span class=\"hljs-built_in\">CloseHandle<\/span>(hProcess);\r\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-number\">0<\/span>;\r\n}\r\n<\/code><\/pre>\n<p>In this example, we first use the OpenProcess function to open a target process. Then we use the CreateEvent function to create an event object for communication between the two processes. Next, we use the DuplicateHandle function to copy the event handle to the target process. Then we use the WaitForSingleObject function to wait for the event to trigger, once the event triggers, the corresponding message is printed. Finally, we close the event handle and the target process handle.<\/p>\n<p>It is important to note that in this example, we used hard-coded target process IDs and event names, so modifications will be needed based on specific circumstances when actually implementing it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The DuplicateHandle function is a function provided by the Windows operating system for copying handles between processes. It can be used to monitor communication between two processes, as well as facilitate data sharing and synchronization between processes. Here is an example of implementing inter-process application monitoring using the DuplicateHandle function: #include &lt;windows.h&gt; #include &lt;iostream&gt; int [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-26875","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Example of inter-process application monitoring using DuplicateHandle - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Example of inter-process application monitoring using DuplicateHandle\" \/>\n<meta property=\"og:description\" content=\"The DuplicateHandle function is a function provided by the Windows operating system for copying handles between processes. It can be used to monitor communication between two processes, as well as facilitate data sharing and synchronization between processes. Here is an example of implementing inter-process application monitoring using the DuplicateHandle function: #include &lt;windows.h&gt; #include &lt;iostream&gt; int [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-16T07:30:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-22T09:39:21+00:00\" \/>\n<meta name=\"author\" content=\"William Carter\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:site\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"William Carter\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/\"},\"author\":{\"name\":\"William Carter\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/f697031891aacefc4b681d139781d3c0\"},\"headline\":\"Example of inter-process application monitoring using DuplicateHandle\",\"datePublished\":\"2024-03-16T07:30:58+00:00\",\"dateModified\":\"2024-03-22T09:39:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/\"},\"wordCount\":167,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/\",\"name\":\"Example of inter-process application monitoring using DuplicateHandle - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-16T07:30:58+00:00\",\"dateModified\":\"2024-03-22T09:39:21+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Example of inter-process application monitoring using DuplicateHandle\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"name\":\"Silicon Cloud Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\",\"name\":\"Silicon Cloud Blog\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"contentUrl\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"width\":1024,\"height\":1024,\"caption\":\"Silicon Cloud Blog\"},\"image\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\",\"https:\/\/twitter.com\/SiliCloudGlobal\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/f697031891aacefc4b681d139781d3c0\",\"name\":\"William Carter\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1786698071dd8d74bec894b512f9e3c610c3a2a32985f67e688976cee3c8bbef?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1786698071dd8d74bec894b512f9e3c610c3a2a32985f67e688976cee3c8bbef?s=96&d=mm&r=g\",\"caption\":\"William Carter\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/williamcarter\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Example of inter-process application monitoring using DuplicateHandle - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/","og_locale":"en_US","og_type":"article","og_title":"Example of inter-process application monitoring using DuplicateHandle","og_description":"The DuplicateHandle function is a function provided by the Windows operating system for copying handles between processes. It can be used to monitor communication between two processes, as well as facilitate data sharing and synchronization between processes. Here is an example of implementing inter-process application monitoring using the DuplicateHandle function: #include &lt;windows.h&gt; #include &lt;iostream&gt; int [&hellip;]","og_url":"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-16T07:30:58+00:00","article_modified_time":"2024-03-22T09:39:21+00:00","author":"William Carter","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"William Carter","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/"},"author":{"name":"William Carter","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/f697031891aacefc4b681d139781d3c0"},"headline":"Example of inter-process application monitoring using DuplicateHandle","datePublished":"2024-03-16T07:30:58+00:00","dateModified":"2024-03-22T09:39:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/"},"wordCount":167,"commentCount":0,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/","url":"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/","name":"Example of inter-process application monitoring using DuplicateHandle - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-16T07:30:58+00:00","dateModified":"2024-03-22T09:39:21+00:00","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/example-of-inter-process-application-monitoring-using-duplicatehandle\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Example of inter-process application monitoring using DuplicateHandle"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/blog\/#website","url":"https:\/\/www.silicloud.com\/blog\/","name":"Silicon Cloud Blog","description":"","publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.silicloud.com\/blog\/#organization","name":"Silicon Cloud Blog","url":"https:\/\/www.silicloud.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","contentUrl":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","width":1024,"height":1024,"caption":"Silicon Cloud Blog"},"image":{"@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SiliCloudGlobal\/","https:\/\/twitter.com\/SiliCloudGlobal"]},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/f697031891aacefc4b681d139781d3c0","name":"William Carter","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1786698071dd8d74bec894b512f9e3c610c3a2a32985f67e688976cee3c8bbef?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1786698071dd8d74bec894b512f9e3c610c3a2a32985f67e688976cee3c8bbef?s=96&d=mm&r=g","caption":"William Carter"},"url":"https:\/\/www.silicloud.com\/blog\/author\/williamcarter\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/26875","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=26875"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/26875\/revisions"}],"predecessor-version":[{"id":61069,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/26875\/revisions\/61069"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=26875"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=26875"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=26875"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}