bool createprocessa(
lpstr lpcommandline, //指向乙個以null結尾的字串,該字串指定要執行的命令列。
lpsecurity_attributes lpprocessattributes, //指向乙個security_attributes結構體,這個結構體決定是否返回的控制代碼可以被子程序繼承。如果lpprocessattributes引數為空(null),那麼控制代碼不能被繼承。
lpsecurity_attributes lpthreadattributes, //同lpprocessattribute,不過這個引數決定的是執行緒是否被繼承,通常置為null。
bool binherithandles, //指示新程序是否從呼叫程序處繼承了控制代碼。
dword dwcreationflags, //指定附加的、用來控制優先類和程序的建立的標誌。還用來控制新程序的優先類,優先類用來決定此程序的執行緒排程的優先順序。
lpvoid lpenvironment, //指向乙個新程序的環境塊。如果此引數為空,新程序使用呼叫程序的環境。
lpcstr lpcurrentdirectory, //指向乙個以null結尾的字串,這個字串用來指定子程序的工作路徑。這個字串必須是乙個包含驅動器名的絕對路徑。如果這個引數為空,新程序將使用與呼叫程序相同的驅動器和目錄。
lpstartupinfoa lpstartupinfo, //指向乙個用於決定新程序的主窗體如何顯示的startupinfo結構體。
lpprocess_information lpprocessinformation //指向乙個用來接收新程序的識別資訊的process_information結構體。
);
程序啟動時的相關資訊,由父程序填充並傳遞進來。
typedef struct _startupinfoa startupinfoa, *lpstartupinfoa;
在建立程序時相關的資料結構之一,該結構返回有關新程序及其主線程的資訊。
為什麼會有執行緒控制代碼和執行緒id?程序的建立過程中一定會建立乙個執行緒,所以該結構體中含有執行緒資訊就能理解。
typedef struct _process_information process_information, *pprocess_information, *lpprocess_information;
建立乙個ie瀏覽器程序,並開啟**。
#include #include //建立子程序
bool createchildprocess(ptchar szchildprocessname, ptchar szcommandline)
//釋放控制代碼
closehandle(pi.hprocess);
closehandle(pi.hthread);
return true;
}int main(int argc, char* ar**)
由於 startupinfo 結構體是由被建立的程序的父程序填充並傳遞過來的。所以不同的父程序傳遞進來的結構體也可能不同。
可以對該結構體中的內容比較,來判斷是否被除錯。
#include #include void antidebug()
2020 12 31 程序的建立過程
每個程序有4gb虛擬記憶體空間 實際只有2g 也就是低2g空間的使用者模式區 程序的使用者模式區低2g空間前64kb與後64kb是沒有使用的。每個程序的核心空間是同乙份,是公用的。分割槽x86 32位windows 空指標賦值區 0x00000000 0x0000ffff 使用者模式區 低2g 0x...
2020 12 31函式其他
三元表示式 x 20 y 15 res yes if x y else no 條件 x y 一元 條件成立 yes 一元 條件不成立 no 一元 生成式 列表生成式 l i for i in range 10 一行 生成10以內的列表 衍生 l i for i in range 10 if i 5 ...
2020 12 31 輸出月曆
includeint main 首先是輸出頭行,這個不用多說。第二個是將輸入的數作為週幾,加入輸出計數器中,使得每輸出到週六時就可以換行。第三,設定乙個單獨的變數,輸出這是幾號。第四,為了使輸出對齊,用取餘的方法判斷這是一行中第幾個數,如果不是第乙個數就多輸出乙個空格,第七個輸出之後輸出換行符。基本...