進程的細節

從今天開始,重新學習一些細節性質的東西

?

一.在VS開發環境中,應用程序的入口點:

_tWinMain?????????????? WinMainCRTStartup

_tWinMain?????????????? wWinMainCRTStartup

_tmain???????????????????? mainCRTStartup

_tmain???????????????????? wmainCRTStartup

相關的介紹 請參考<Windows核心編程> 這4個入口函數在crtexe.c文件中

這些啟動函數主要是初始化一些全局變量

如果要使用這些全局變量,請包含stdlib.h

?

二.進程的實例句柄,其值大概是其載入內存的基址(GetModuleHandle)

?

三.進程的命令行

參考

GetCommandLine和CommandLineToArgW

?

四.進程的環境變量

GetEnviromentStrings

FreeEnviromentStrings

?

用戶登錄Windows時,系統會創建外殼Shell進程,并將一組環境變量與其關聯,系統通過檢查注冊表中的2個注冊表項來獲得初始的環境字符串

第一個注冊表項包含應用于系統的所有環境變量的列表

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Enviroment

第二個注冊表項包含應用于當前登錄用戶的所有環境變量列表

HKEY_CURRENT_USER\Enviroment

用戶可以在環境變量中添加或刪除這些環境變量

?

應用程序還可以使用各種注冊表函數來修改這些注冊表項,不過,為了使改動對所有的應用程序生效,用戶必須注銷并重新登錄.有的應用程序(比如資源管理器,控制面板)可以在其主窗口接受到WM_SETTINGCHANGE消息時,用新的注冊表項來更新他們的環境變量.例如,假如更新了注冊表項,并希望應用程序立即更新他們的環境塊,可以進行如下調用

SendMessage(HWND_BROADCAST,MW_SETTINGCHANGE,0,(LPARAM)TEXT("Enviroment"));

?

通常子進程會繼承一組環境變量,這些環境變量和父進程的環境變量相同.不過,父進程可以控制哪些環境變量允許子進程繼承,這里所說的繼承,是指子進程獲得父進程的環境塊的一個副本,這個副本子進程可以隨意修改而不會影響到父進程.

?

GetEnviromentVariable來判斷一個環境變量是否存在于進程的環境變量塊中,一般這個函數的安全的用法是調用2次,第一次調用cchValue中傳入0,那么函數返回時會返回緩沖區需要的大小,

ExpandEnviromentStrings函數來檢測可替換的環境變量字符串(比如%User%)其用法和上面的差不多(詳細的介紹請參考Windows核心編程? 進程的環境變量塊)

?

最后可以使用SetEnviromentVariable函數添加一個變量,刪除一個變量,或者修改一個變量

?

五進程的錯誤模式

SetErrorMode設置進程的錯誤模式

如果希望子進程不繼承某些父進程的錯誤模式,請在CreateProcess中指明

?

六.進程的當前目錄

GetCurrentDirectory

例如一個進程有如下2個環境變量

=C:=C:\Bin

=D:=D:\bin

當前程序在C\Bin目錄下,而且我們的程序調用CreateFile來打開D:ReadMe.txt,那么系統就會查找環境變量=D:.由于=D:變量是存在的,所以系統將嘗試從D:\bin目錄下打開這個文件.如果=D:變量不存在,那么系統就會試著從D盤的根目錄打開ReadMe.txt.

可以使用C語言運行庫函數_chdir函數而不是SetCurrentDirectory函數來更改設置當前目錄._chdir函數在內部調用SetCurrentDirectory.但_chdir還會調用SetEnviromentVariable來添加或修改環境變量,從而使不同的驅動器的當前目錄得以保留

如果一個父進程創建了一個希望傳給子進程的環境塊,子進程的環境塊就不會自動繼承父進程的當前目錄,相反,子進程的當前目錄默認為每個驅動器的根目錄.如果希望子進程繼承父進程的當前目錄,父進程就必須在生成子進程之前,創建這些驅動器號環境變量,并把它們添加到環境變量塊中,父進程通過調用GetFullPathName來獲取他的當前目錄


七.系統版本
GetVersion
GetVersionEx-------OSVERSIONINFOEX
為了進一步簡化編程,Windows Vista還提供了VerifyVersionInfo,它能比較主機系統的版本和應用程序要求的版本

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375301.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375301.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375301.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

maven環境快速搭建(轉)

最近&#xff0c;開發中要用到maven&#xff0c;所以對maven進行了簡單的學習。因為有個maven高手在身邊&#xff0c;所以&#xff0c;很快就上手了&#xff0c;我這里算是自我總結吧。關于maven是什么東東&#xff0c;請參考其它文章。 ----------------準備工作-------------…

cocos2d-x3.0 相對布局(一)

2dx相對布局和Android非常類似。假設前完成Android它應該是easy入門。Size widgetSize Director::getInstance()->getWinSize();Text* alert Text::create("Layout", "fonts/Marker Felt.ttf", 30 );alert->setColor(Color3B(159, 168, 176));aler…

管理員以標準權限運行時

在XP時代,大多數用戶都用一個管理員(administrator)帳號來登錄Windows 利用這個賬戶,用戶幾乎能沒有任何限制的訪問重要的系統資源,因為該賬戶被授予了很高的權限,一旦用這個帳號登錄了xp以及xp之前的操作系統,Windows操作系統就會創建一個安全令牌(security token).每當有代碼…

HDU 4791 amp; ZOJ 3726 Alice#39;s Print Service (數學 打表)

題目鏈接&#xff1a; HDU:http://acm.hdu.edu.cn/showproblem.php?pid4791 ZJU:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId5072 Problem DescriptionAlice is providing print service, while the pricing doesnt seem to be reasonable, so people using…

奪命雷公狗---ECSHOP---08---商品頁的拇改成星星

<strong>用戶評價&#xff1a;</strong>{*---------商品評價星星開始----------*}<img src"./images/stars{$goods.comment_rank}.gif" alt"comment rank {$goods.comment_rank}">{*---------商品評價星星結束-------*} 這里主要是要有星…

文件指針

一.移動文件指針 SetFilePointer,hFile,lDistanceToMove,lpDistanceToMoveHigh,dwMoveMethod dwMoveMethod 指明移動的模式 FILE_BEGIN 不管文件處于什么地方,總是從文件的頭部開始移動,這時的位置參數相當于指定了一個絕對位置 FILE_CURRENT 從當前的文件指針處開始移…

見證下的自我變化-2014全年總結

又是一年總結季&#xff0c;回過頭看看看自己的成長&#xff0c;心里真的是滿滿的喜悅之情…… 一年前自己的總結博客&#xff1a;http://blog.csdn.net/huo065000/article/details/19632603 半年前自己的總結博客&#xff1a;http://blog.csdn.net/huo065000/article/details/…

【Linux學習篇】This virtual machine is configured for 64-bit guest operating systems.……

在學習Linux的基本操作的時候&#xff0c;安裝虛擬環境則提示自己 This virtualmachine is configured for 64-bit guest operatingsystems.……起初由于各種拒絕的心理&#xff0c;所以屏蔽了這個錯誤&#xff0c;但是屏蔽永遠也解決不了問題的&#xff0c;所以自己則嘗試百度…

圖解SSIS監視文件夾并自動導入數據

圖解SSIS監視文件夾并自動導入數據 原文:圖解SSIS監視文件夾并自動導入數據 演示案例&#xff1a;讓系統自動監視文件夾&#xff0c;并把文件夾下面的excel文件導入到sql中&#xff0c;之后清空目錄。這個過程以往都需要寫程序來實現或者定時執行&#xff0c;現在可以用ssis來訂…

DLL轉Lib

在C中,為了允許操作符重載和函數重載,C編譯器往往按照某種規則改寫每一個入口點的符號名,以便使用同一個名字(具有不同的參數類型或者是不同的作用域)有多種不同的用法,而不會打破現有基于C的鏈接器,.這項技術通常被稱為改編(Name Mangling)或者名稱修飾(Name Decoration),許多…

WP8手機解鎖時提示“請確保IPOVERUSBSVC服務正常運行”解決方法

如果你各種重啟服務 卸載手機 重裝驅動都試過了還不行&#xff0c;請看看你是否安裝了Hyper-v或Vitualbox虛擬機&#xff0c;很有可能是虛擬交換機造成的。 我在網絡連接屬性里看到這個 把它卸載后&#xff0c;解鎖成功。 解鎖后記得重新安裝卸載的那個網絡服務轉載于:https://…

Win32路徑操作相關API

一.路徑截斷與合并 PathRemoveArgs 去除路徑的參數 PathRemoveBackslash 去除路徑最后的反斜杠 "\" PathAddBackslash 在路徑最后加上反斜杠 "\" PathRemoveBlanks 去除路徑前后的空格 PathAddExtension 在文件路徑后面加上擴展名 PathRemoveExtension 去…

Openjudge-計算概論(A)-稱體重

描述&#xff1a; 趙、錢、孫、李四個人中既有大人也有小孩&#xff0c;給他們稱體重時發現&#xff0c;他們每個人的體重都不一樣&#xff0c;且體重&#xff08;單位&#xff1a;公斤&#xff09;恰好是10的整數倍&#xff0c;且他們的體重都不高 于50公斤&#xff0c;已知趙…

浮點數的存儲

-------------------------------------------------------------------------------- 在VC6.0----float環境一共32位 其中第一位是符號位 第二到第9位中間8位為小數點位置&#xff08;指數以127的二進制為原點向下為負指數 向上為正指數&#xff09;后面23位為數據位。 S EE…

第二階段總結

結合第二階段后3天&#xff0c;我們試用了UI&#xff0c;antionbar&#xff0c;menu等實用&#xff0c;成功的做出了字體的轉換&#xff0c;題目的轉化等功能。 其實四則運算&#xff0c;說難不難 說易不易&#xff0c;總結出 主要有付出&#xff0c;就有回報。 menu等做的過程…

const 和指針

c用了那么久&#xff0c;覺得 const 和指針配合到一起的時候就會有點點分不出來。 如下: const Data* pData;Data const * pDataData * const pDataconst Data * const pData Data const * const pData是不是有點暈&#xff1f; 我其實用得最多的是 const Data* pData, 也…

Linux 查看系統用戶的登錄日志

查看用戶登錄系統的日志有兩類日志記錄用戶登錄的行為&#xff0c;一是記錄登錄者的數據&#xff0c;一個是記錄用戶的登錄時間一&#xff0c;記錄用戶登錄數據/var/log/wtmp日志文件記錄用戶登錄的數據。但這個文件是被編碼的文件&#xff0c;不能直接用vi、cat等命令查看&…

Android -- 自定義權限

在android系統的安全模型中&#xff0c;應用程序在默認的情況下不可以執行任何對其他應用程序&#xff0c;系統或者用戶帶來負面影響的操作。如果應用需要執行某些操作&#xff0c;就需要聲明使用這個操作對應的權限。 &#xff08;在manifest文件中 添加標記&#xff09;。 ap…

Win32 路徑操作API

路徑操作相關API 路徑截斷與合并函數 PathRemoveArgs 去除路徑的參數 PathRemoveBackslash 去除路徑最后的反斜杠“\” PathAddBackslash 在路徑最后加上反斜杠“\” PathRemoveBlanks 去除路徑前后的空格 PathAddExtension 在文件路徑后面加上擴展名 Pa…

dbms_output.put_line長度限制問題

dbms_output.put_line長度限制問題對于10g以上版本(包括10g), dbms_output.put_line的最大長度限制是32767. 如果報錯buffer overflow, 執行如下語句即可:set serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED對于10g以下版本dbms_output.put_line最大長度限制是255.轉載于…