白話windows核心物件共享之複製物件控制代碼

2021-06-22 07:14:12 字數 1527 閱讀 4140

引子:話說老王的果園大豐收,老王心花怒放,帶著全家去美國阿拉斯加度假。阿拉斯加有很多東西琳琅滿目,都是中國沒有的,老王及家人都過了一把購物癮。但是有一次卻遇到了比較尷尬的事。怎麼回事呢?原來老王第一次出國,在買地攤上的東西時討價還價100元,但是給人家的卻是100元人民幣,人家自然不幹撒,你100元才多少美元呀,老王只好忍痛割愛給了600元人民幣。

為什麼會出現這樣的尷尬呢?因為兩個國家的貨幣換算不是一樣的。中國的100元和美國的100元不是等價的,如何才能等價呢?必須根據當前匯率來換算。今天要講的複製核心物件控制代碼也是這個道理。a程序不能直接用b程序中的核心物件,必須呼叫相關的函式進行複製並轉換成該程序的控制代碼值。

下面給出**:

a程序:

#include "stdafx.h"

#include #include #include #include handle g_hmutext = null ;

handle getprocesshandle(lpctstr szname)

processentry32 pe;

bool bok;

pe.dwsize = sizeof(pe);

bok = process32first (hsanpshot, &pe);

if (!bok)

return null;

do bok = process32next (hsanpshot, &pe);

}while (bok);

return null;

}void getcurtime(char* str)

dword winapi fun(lpvoid lp)

int _tmain(int argc, _tchar* argv)

return 0;

}

b程序:

#include "stdafx.h"

#include #include #include handle g_hmutext = null ;

void getcurtime(char* str)

dword winapi fun(lpvoid lp)

int _tmain(int argc, _tchar* argv)

return 0;

}

下面給出分析:

a程序建立了乙個互斥變數g_hmutext,然後呼叫duplicatehandle將這個控制代碼表的記錄項複製到b程序(b程序必須首先執行,a程序才能通過getprocesshandle(a)獲得b程序的控制代碼)控制代碼表的記錄項中,並給出在b程序中對應的索引。請看效果:

a程序把建立的g_hmutext(控制代碼值是48)複製到b程序,得到b程序中該控制代碼值也是48(不知道有什麼聯絡,還請大神告知)。這樣將這個值給程序b中的g_hmutext控制代碼。a程序中線程結束之後,b程序中等待g_hmutext的執行緒立馬開始執行,時間都是14:14:36,所以成功實現共享。

核心物件共享

1 通過 控制代碼繼承 實現核心物件的共享 父程序 include stdafx.h include define max buffer size 2048 int main int argc,char argv lpfilebuffer heapalloc getprocessheap 堆控制代碼...

Windows程序間共享核心物件幾種方式

核心物件的控制代碼是程序相關的,這樣更可靠,更安全 windows提供下列n種機制來允許程序共享核心物件。只有程序間存在父子關係才能使用物件控制代碼繼承 系統會遍歷父程序的控制代碼表將所有有效的控制代碼完整的複製到子程序的控制代碼表中 這個動作只會在建立子程序的進行一次,後續父程序再建立控制代碼物件...

windows核心物件

核心物件只是作業系統核心分配的乙個記憶體塊,並且只能由作業系統核心訪問。該記憶體塊是一種資料結構,它的成員負責維護該物件的各種資訊。windows提供一組函式建立和操作核心物件。呼叫乙個建立核心物件的函式,函式會返回乙個控制代碼,該控制代碼標識了這個核心物件,這個控制代碼可由當前程序中的所有執行緒呼...