WDF驅動開發-PNP和電源管理(二)

下面是一種比較典型的 PnP 和電源管理方案,WDF框架在這些情況下調用驅動程序的事件回調函數:

  • 用戶插入設備
  • 用戶拔出設備
  • 設備進入低功耗狀態
  • 設備回到工作狀態
  • PnP 管理器重新分發系統資源

這些幾乎是所有的和PNP、電源管理相關的場景了,它們分別詮釋了設備在各種情況下比較典型的用戶場景,接下來會依次分析這些場景下WDF框架的行為。

用戶插入設備

在以下方案中,設備節點包括 KMDF 總線驅動程序和支持 PnP 設備的一個或多個 KMDF 函數或Filter驅動程序。

當用戶在系統運行時將設備插入總線時,設備的總線驅動程序和框架將執行以下任務:

  • 設備的總線驅動程序檢測設備并調用 WdfChildListAddOrUpdateChildDescriptionAsPresent (此過程稱為“動態枚舉”);
  • 框架調用總線驅動程序的 EvtChildListCreateDevice 回調函數,因此總線驅動程序可以調用 WdfDeviceCreate 為物理設備創建框架設備對象?(PDO) ;
  • 框架調用總線驅動程序的 EvtDeviceResourcesQuery 和 EvtDeviceResourceRequirementsQuery 回調函數來確定設備所需的系統硬件資源;

接下來,PnP 管理器確定哪些其他驅動程序 (功能驅動程序和Filter驅動程序) 設備所需的。 如果尚未加載這些驅動程序,PnP 管理器將加載它們并調用其 DriverEntry 例程。 對于每個函數或Filter驅動程序,將執行以下操作:

1. 框架調用每個附加驅動程序的 EvtDriverDeviceAdd 回調函數,以便驅動程序可以調用 WdfDeviceCreate 來創建表示驅動程序設備的框架設備對象。 功能驅動程序 (FDO) 創建功能設備對象,Filter驅動程序 (Filter DO) 創建Filter設備對象。

2. 框架調用每個函數和Filter驅動程序的 EvtDeviceFilterRemoveResourceRequirements 回調函數,然后調用每個驅動程序的 EvtDeviceFilterAddResourceRequirements 回調函數。 在設備啟動之前,框架立即調用 EvtDeviceRemoveAddedResources 回調函數。 這三個回調函數允許Filter和功能驅動程序在 PnP 管理器將資源分配給設備之前修改設備所需的硬件資源列表。?

3. 框架確保設備已達到其工作 (D0) 電源狀態。

4. 對于支持設備的每個函數和Filter驅動程序,框架依次執行以下操作,一次一個驅動程序,從驅動程序堆棧中最低的驅動程序開始:

  • 框架 (調用驅動程序的 EvtDevicePrepareHardware 回調函數(如果該函數存在) ),并傳遞 PnP 管理器分配給設備的硬件資源列表;
  • 框架調用驅動程序的 EvtDeviceD0Entry 回調函數 (如果它存在于) ;
  • 框架 調用驅動程序的 EvtInterruptEnable 回調函數(如果每個中斷存在),然后調用驅動程序的 EvtDeviceD0EntryPostInterruptsEnabled 回調函數 (如果存在) ,則調用該驅動程序的 EvtDeviceD0EntryPostEnabled 回調函數。
  • 如果硬件和驅動程序支持 DMA,框架將調用驅動程序的 EvtDmaEnablerFill、 EvtDmaEnablerEnable 和 EvtDmaEnablerSelfManagedIoStart 回調函數 (如果它們存在) 創建的每個 DMA 通道
  • 框架調用驅動程序的 EvtChildListScanForChildren 回調函數 (如果該函數存在于) ;
  • 框架啟動設備的所有電源托管 I/O 隊列;
  • 如果驅動程序使用自托管 I/O,框架將調用驅動程序的 EvtDeviceSelfManagedIoInit 回調函數;
用戶拔出設備

當系統運行時,用戶可以通過以下兩種方式之一刪除設備:有 條不紊地刪除設備,這意味著用戶通知系統設備即將 (刪除,例如使用拔出或彈出硬件程序) ;或 意外刪除,這意味著用戶在不通知系統的情況下拔下設備。 如果總線支持意外刪除 (例如 USB) ,則設備的驅動程序必須能夠處理設備的突然消失。

有序刪除

用戶通過使用系統的拔出或彈出硬件程序、通過使用設備管理器禁用設備或推送可彈出設備的彈出按鈕來請求刪除。 框架允許刪除或禁用設備,除非驅動程序具有:

  • 名為 WdfDeviceSetSpecialFileSupport ,并在設備上打開一個特殊文件;
  • 名為 WdfDeviceSetStaticStopRemove;
  • 提供了 EvtDeviceQueryRemove 回調函數,并且回調函數已否決刪除;

對于支持該設備的每個函數和Filter驅動程序,框架從驅動程序堆棧中最高的驅動程序開始,按順序一次執行一個驅動程序的以下操作:

  • 如果驅動程序使用自托管 I/O,框架將調用驅動程序的 EvtDeviceSelfManagedIoSuspend 回調函數;
  • 框架會停止驅動程序的所有電源托管 I/O 隊列;
  • 如果硬件和驅動程序支持 DMA,框架將驅動程序的 EvtDmaEnablerSelfManagedIoStop、 EvtDmaEnablerFlush 和 EvtDmaEnablerDisable 回調 函數 (如果它們存在) 創建的每個 DMA 通道;
  • 框架 (調用驅動程序的 EvtDeviceD0ExitPreInterruptsDisabled 回調函數(如果存在) ),然后調用驅動程序的 EvtInterruptDisable 回調函數 (如果存在每個中斷) ,則驅動程序可以禁用設備中斷;
  • 框架 調用驅動程序的 EvtDeviceD0Exit 回調函數(如果存在) ;
  • 框架調用驅動程序的 EvtDeviceReleaseHardware 回調函數 (如果它存在) ,則向其傳遞 PnP 管理器分配給設備的硬件資源列表;
  • 如果驅動程序使用自托管 I/O,框架將調用驅動程序的 EvtDeviceSelfManagedIoFlush 回調函數;
  • 如果驅動程序使用自托管 I/O,框架將調用驅動程序的 EvtDeviceSelfManagedIoCleanup 回調函數;

總線驅動程序是堆棧中最后調用的驅動程序。 當框架調用總線驅動程序的 EvtDeviceD0Exit 回調函數時,回調函數將設備的電源狀態 (總線) 的子設備設置為 D3。 總線驅動程序可以通過調用 WdfDeviceInitSetReleaseHardwareOrderOnFailure 來控制框架何時調用其 EvtDeviceReleaseHardware 回調函數。

意外刪除

用戶意外拔下設備。 設備總線的總線驅動程序發現設備缺失,并調用 WdfChildListUpdateChildDescriptionAsMissing。

對于支持該設備的每個函數和Filter驅動程序,框架從驅動程序堆棧中最高的驅動程序開始,按順序一次執行一個驅動程序的以下操作:

1. 框架調用驅動程序的 EvtDeviceSurpriseRemoval 回調函數 ((如果存在) )。

2. 如果設備處于工作狀態 (D0) 拔出設備時的狀態:

  • 框架會停止驅動程序的所有電源托管 I/O 隊列;
  • 如果驅動程序使用自托管 I/O,框架將調用驅動程序的 EvtDeviceSelfManagedIoSuspend 回調函數;
  • 如果硬件和驅動程序支持 DMA,框架將驅動程序的 EvtDmaEnablerSelfManagedIoStop、 EvtDmaEnablerFlush 和 EvtDmaEnablerDisable 回調 函數 (如果它們存在) 創建的每個 DMA 通道;
  • 框架調用驅動程序的 EvtDeviceD0ExitPreInterruptsDisabled 和 EvtInterruptDisable 回調函數 (如果它們存在) ,以便驅動程序可以禁用設備中斷;
  • 框架 調用驅動程序的 EvtDeviceD0Exit 回調函數(如果存在) ;

3. 框架調用驅動程序的 EvtDeviceReleaseHardware 回調函數 (如果它存在) ,將 PnP 管理器分配給設備的硬件資源列表傳遞。
4. 如果驅動程序使用自托管 I/O,框架將調用驅動程序的 EvtDeviceSelfManagedIoFlush 回調函數。
5. 如果驅動程序使用自托管 I/O,框架將調用驅動程序的 EvtDeviceSelfManagedIoCleanup 回調函數。
請注意,設備隨時可能會意外刪除。 因此,框架可能會在前面步驟中顯示的時間調用驅動程序的 EvtDeviceSurpriseRemoval 回調函數。 例如,如果用戶在設備進入低功耗狀態時意外拔下電源,框架可能會在調用 EvtDeviceReleaseHardware 回調函數后調用 EvtDeviceSurpriseRemoval 回調函數。 不得以假定在特定序列中調用 EvtDeviceSurpriseRemoval 回調函數和其他回調函數的方式編寫代碼。

此外,框架不會將設備的 EvtDeviceSurpriseRemoval 回調函數與該設備前面步驟中列出的任何回調函數同步。 因此, EvtDeviceSurpriseRemoval 回調函數可能會運行,而前面列出的另一個回調函數也在運行。

設備進入低功耗狀態

如果發生以下情況之一,設備將使其工作 (D0) 狀態,并進入低功耗狀態:

  • 設備 處于空閑狀態?訪問,并且能夠在系統保持工作 (S0) 狀態時進入低功耗空閑狀態;
  • 系統的電源狀態已從其工作 (S0) 狀態更改為低功耗狀態。 驅動程序可以調用 WdfDeviceGetSystemPowerAction 來確定系統電源狀態更改的原因;

對于支持該設備的每個函數和篩選器驅動程序,框架從驅動程序堆棧中最高的驅動程序開始,按順序一次執行一個驅動程序的以下操作:

  • 如果驅動程序使用自托管 I/O,框架將調用驅動程序的 EvtDeviceSelfManagedIoSuspend 回調函數;
  • 框架會停止驅動程序的所有電源托管 I/O 隊列,并調用其 EvtIoStop 回調函數 (如果它們存在) ;
  • 如果驅動程序是設備的電源策略所有者,框架將調用其 EvtDeviceArmWakeFromS0、 EvtDeviceArmWakeFromSx 或 EvtDeviceArmWakeFromSxWithReason 回調函數;
  • 如果硬件和驅動程序支持 DMA,框架會調用驅動程序的 EvtDmaEnablerSelfManagedIoStop、 EvtDmaEnablerFlush 和 EvtDmaEnablerDisable 回調 函數 (如果它們存在) 創建的每個 DMA 通道;
  • 框架 調用驅動程序的 EvtDeviceD0ExitPreInterruptsDisabled 回調函數(如果存在) ,然后調用驅動程序的 EvtInterruptDisable 回調函數 (如果存在每個中斷) ,以便驅動程序可以禁用設備中斷;
  • 框架 調用驅動程序的 EvtDeviceD0Exit 回調函數(如果存在) ;

總線驅動程序是堆棧中最后調用的驅動程序。 當框架調用總線驅動程序的 EvtDeviceD0Exit 回調函數時,回調函數將設備的電源狀態 (總線) 的子設備設置為低功耗狀態。 框架指定 D3 低功耗狀態,除非電源策略所有者指定了不同的低功耗狀態。

注意:總線驅動程序用于設置子設備的電源狀態的方法特定于總線。 例如,PCI 總線電源管理規范定義 16 位電源管理控制/狀態寄存器 (PMCSR) 。 最低兩位 (“PowerState”) 都決定設備的當前電源狀態,并用于將設備設置為新的電源狀態。 pci.sys當 PDO 收到IRP_MN_SET_POWER/D3 時,它會讀取 PMCSR,將 PowerState 位更改為 11b (功率級別 D3) ,并寫回 PMCSR。

設備回到工作狀態

如果發生以下情況之一,處于低功耗狀態的設備將返回到其工作狀態:

  • 設備檢測到外部事件并在其總線上觸發喚醒信號。 檢測喚醒信號的總線驅動程序調用 WdfDeviceIndicateWakeStatus。 因此,框架調用總線驅動程序的 EvtDeviceDisableWakeAtBus 回調函數;
  • 設備處于空閑狀態,驅動程序調用 WdfDeviceStopIdle;
  • 系統的電源狀態已從低功率狀態更改為其工作 (S0) 狀態;

在上述每種情況下,框架都會調用總線驅動程序的 EvtDeviceD0Entry 回調函數,然后將設備 (總線) 的子設備還原到其工作 (D0) 狀態。

對于支持設備的每個函數和Filter驅動程序,框架依次執行以下操作,一次一個驅動程序,從驅動程序堆棧中最低的驅動程序開始:

  • 框架調用驅動程序的 EvtDeviceD0Entry 回調函數 (如果它存在于) 。
  • 框架 調用驅動程序的 EvtInterruptEnable 回調函數(如果每個中斷存在) ,然后調用驅動程序的 EvtDeviceD0EntryPostInterruptsEnabled 回調函數 (如果它存在) ,則調用該驅動程序的 EvtDeviceD0EntryPostEnabled 回調函數) 。
  • 如果硬件和驅動程序支持 DMA,框架將調用驅動程序的 EvtDmaEnablerFill、 EvtDmaEnablerEnable 和 EvtDmaEnablerSelfManagedIoStart 回調函數 (如果它們對于創建的每個 DMA 通道存在) ;
  • 如果驅動程序是設備的電源策略所有者,框架將調用其 EvtDeviceDisarmWakeFromS0 或 EvtDeviceDisarmWakeFromSx 回調函數';
  • 框架調用驅動程序的 EvtChildListScanForChildren 回調函數 (如果它存在于) ;
  • 框架會重啟驅動程序的所有電源托管 I/O 隊列,并在必要時 (調用其 EvtIoResume 回調函數) ;
  • 如果驅動程序使用自托管 I/O,框架將調用驅動程序的 EvtDeviceSelfManagedIoRestart 回調函數;
PnP 管理器重新分發系統資源

如果用戶將設備添加到系統,并且設備需要 PnP 管理器已分配給另一個設備的系統資源,則 PnP 管理器會嘗試重新分配資源。

在此過程中,PnP 管理器會停止設備并將其從工作 (D0) 狀態中取出。 然后,它將新資源列表傳遞給設備,以便它們可以使用新資源重啟。

重新分發資源時,如果設備的驅動程序之一具有:PnP 管理器不會更改設備的資源分配:

  • 名為 WdfDeviceSetSpecialFileSupport ,并在設備上打開一個特殊文件;
  • 名為 WdfDeviceSetStaticStopRemove;
  • 提供了一個 EvtDeviceQueryStop 回調函數,并且回調函數已否決了重新分配;
Power-Down序列

對于支持要停止的設備的每個函數和篩選器驅動程序,框架從驅動程序堆棧中最高的驅動程序開始,按順序一次執行一個驅動程序的以下操作:

  • 如果驅動程序使用自托管 I/O,框架將調用驅動程序的 EvtDeviceSelfManagedIoSuspend 回調函數;
  • 框架停止設備的所有電源托管 I/O 隊列;
  • 如果硬件和驅動程序支持 DMA,框架會針對創建的每個 DMA 通道調用驅動程序的 EvtDmaEnablerSelfManagedIoStop、 EvtDmaEnablerFlush 和 EvtDmaEnablerDisable 回調 函數;
  • 調用驅動程序的 EvtDeviceD0ExitPreInterruptsDisabled 和 EvtInterruptDisable 回調函數 (如果它們存在) ,以便驅動程序可以禁用設備中斷;
  • 框架調用驅動程序的 EvtDeviceD0Exit 回調函數(如果存在) ;
  • 框架調用驅動程序的 EvtDeviceReleaseHardware 回調函數(如果該函數存在) ,傳遞 PnP 管理器分配給設備的硬件資源列表;

總線驅動程序是堆棧中最低的驅動程序,最后調用。 當框架調用總線驅動程序的 EvtDeviceD0Exit 回調函數時,它將句柄傳遞給表示設備的 PDO 的框架設備對象和 WdfPowerDeviceD3Final 的 TargetState 值。 總線驅動程序可以通過調用 WdfDeviceInitSetReleaseHardwareOrderOnFailure 來控制框架何時調用其 EvtDeviceReleaseHardware 回調函數。

Power-Up序列

第一個調用的驅動程序是總線驅動程序。 當框架調用總線驅動程序的 EvtDeviceD0Entry 回調函數時,回調函數會將設備 (總線) 的子設備還原到其工作 (D0) 狀態。

對于支持該設備的每個函數和篩選器驅動程序,框架按順序一次執行一個驅動程序,從驅動程序堆棧中最低的驅動程序開始:

  • 框架調用驅動程序的 EvtDevicePrepareHardware 回調函數(如果存在) ,并將 PnP 管理器分配給設備的硬件資源列表傳遞;
  • 框架調用驅動程序的 EvtDeviceD0Entry 回調函數 (如果存在) ;
  • 框架調用驅動程序的 EvtInterruptEnable 和 EvtDeviceD0EntryPostInterruptsEnabled 回調函數 (如果它們存在) ,以便驅動程序可以啟用設備中斷;
  • 如果硬件和驅動程序支持 DMA,框架會針對創建的每個 DMA 通道調用驅動程序的 EvtDmaEnablerFill、 EvtDmaEnablerEnable 和 EvtDmaEnablerSelfManagedIoStart 回調函數;
  • 框架調用驅動程序的 EvtChildListScanForChildren 回調函數 (如果存在) ;
  • 框架重啟設備的所有電源托管 I/O 隊列;
  • 如果驅動程序使用自我管理的 I/O,框架將調用驅動程序的 EvtDeviceSelfManagedIoRestart 回調函數;

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

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

相關文章

達夢8 網絡中斷對系統的影響

測試環境:三節點實時主從 版本:--03134283938-20221019-172201-20018 測試1 系統沒有啟動確認監視器 關閉節點3網卡 登錄節點1檢查主庫狀態 顯示向節點2發送歸檔成功,但無法收到節點3的消息,節點1掛起 日志報錯如下&#xf…

易于上手的requests

Python中的requests庫主要用于發送HTTP請求并獲取響應結果。在現代網絡編程中,HTTP請求是構建客戶端與服務器之間通信的基礎。Python作為一種高級編程語言,其豐富的庫支持使得它在網絡數據處理領域尤為突出。其中,requests庫以其簡潔、易用的…

力扣560. 和為 K 的子數組

Problem: 560. 和為 K 的子數組 文章目錄 題目描述思路復雜度Code 題目描述 思路 1.初始化一個哈希表preSum,用于記錄前綴和及其出現次數,ans記錄和為k的子數組數量、sum_i記錄當前前綴和; 2.將前綴和為 0 的情況存入哈希表,表示前綴和為 0 出…

【Python】認識 Python

一、計算機基礎概念 1、什么是計算機 很多老一輩的人,管下面這個叫做計算機。然而,它只是 “計算器”,和計算機是有很大區別的。 現在我們所說的計算機,不光能進行算術運算,還能進行邏輯判斷、數據存儲、網絡通信等…

遇到no module named ‘pyLDAvis.sklearn‘的解決辦法

在NLP學習中,常常用到LDA主題模型對文本進行分類,可視化經常用到的代碼有 import pyLDAvis import pyLDAvis.sklearnpanel pyLDAvis.sklearn.prepare(lda, tf_idf, tf_idf_vectorizer) pyLDAvis.save_html(panel, lda_visualization.html) pyLDAvis.di…

HTML靜態網頁成品作業(HTML+CSS)—— 節日母親節介紹網頁(5個頁面)

🎉不定期分享源碼,關注不丟失哦 文章目錄 一、作品介紹二、作品演示三、代碼目錄四、網站代碼HTML部分代碼 五、源碼獲取 一、作品介紹 🏷?本套采用HTMLCSS,未使用Javacsript代碼,共有5個頁面。 二、作品演示 三、代…

騎砍2霸主MOD開發(12)-游戲實例GameEntity

一.GameEntity游戲實例 <1.通用GameEntity,梯子,椅子,攻城云梯,戰車等定義為GameEntity,一個GameEntity由若干GameEntityComponets組成,例如攻城云梯的輪子是一個獨立Component,支架是一個獨立Component, GameEntity GameEntityComponent1 GameEntityComponent2 GameEntit…

前端開發之WebSocket通信

WebSocket WebSocket是一種在單個TCP連接上進行全雙工通信&#xff08;雙向同時通信&#xff09;的協議&#xff0c;它允許服務器和客戶端之間自由地交換數據&#xff0c;無需反復建立連接。其特點包括&#xff1a; 雙向通信&#xff1a;實時性強&#xff0c;支持服務器向客戶…

移動端前端開發遇到過的Andorid和IOS的差異記錄

移動端前端開發遇到過的安卓和蘋果的差異記錄 1. 引入外部資源&#xff0c;最好用https2. IOS時間戳獲取NaN問題3. 金額三位分節顯示方式4. .webp圖片支持問題 1. 引入外部資源&#xff0c;最好用https ios處于安全性的考慮&#xff0c;不大支持http引入外部資源&#xff0c;所…

【kubernetes】探索k8s集群的配置資源(secret和configma)

目錄 一、Secret 1.1Secret 有四種類型 1.2Pod 有 3 種方式來使用 secret 1.3應用場景&#xff1a;憑據 1.4創建 Secret 1.4.1用kubectl create secret命令創建Secret 1.4.2內容用 base64 編碼&#xff0c;創建Secret 1.4.2.1Base64編碼 1.4.2.2創建YAML文件 1.4.2.3…

《計算機網絡》

計算題【33】 題目:假設一個有噪聲信道的帶寬為3KHz,信噪比為30dB,則該信道的最大數據傳輸速率是多少? C = W log2(1+S/N)(bit/s)=3000Hz* log2(1+30)= 29.9kbps 題目:一個網絡中,設定的IP地址范圍是:172.88.32.1至172.88.32.254,試確定其合適的子網掩碼。 分析第…

「前端+鴻蒙」鴻蒙應用開發預覽模擬器運行

在鴻蒙應用開發中&#xff0c;預覽和模擬器運行是開發流程中的重要環節&#xff0c;它們允許開發者在不使用實體設備的情況下測試應用的界面和功能。以下是如何使用華為DevEco Studio進行預覽和在模擬器上運行鴻蒙應用的詳細步驟&#xff0c;以及相應的示例代碼。 快速體驗-預覽…

277 基于MATLAB GUI火災檢測系統

基于MATLAB GUI火災檢測系統&#xff0c;可以實現圖片和視頻的火苗檢測。火焰識別的三個特征&#xff1a;1個顏色特征&#xff0c;2個幾何特征顏色特征&#xff1a;HSV顏色空間下&#xff0c;對三個通道值進行閾值濾波&#xff0c;幾何特征1&#xff1a;長寬比&#xff0c;幾何…

用 Python 擼一個 Web 服務器-第3章:使用 MVC 構建程序

Todo List 程序介紹 我們將要編寫的 Todo List 程序包含四個頁面&#xff0c;分別是注冊頁面、登錄頁面、首頁、編輯頁面。以下分別為四個頁面的截圖。 注冊頁面&#xff1a; 注冊 登錄頁面&#xff1a; 登錄 首頁&#xff1a; 首頁 編輯頁面&#xff1a; 編輯 程序頁面非…

程序員搞副業一些會用到的工具

微信號采集(爬蟲)技術的選型 那么&#xff0c;我們應該使用什么技術來從龐大的網頁內容中自動篩選和提取微信號呢&#xff1f;答案就是&#xff1a;數據采集技術&#xff0c;也就是爬蟲技術。 然而&#xff0c;數據采集技術種類繁多&#xff0c;我們具體應該采用哪一個呢&…

【Linux】—— 線程控制的基本介紹

目錄 &#xff08;一&#xff09;POSIX線程庫 &#xff08;二&#xff09;創建線程 2.1 線程ID及進程地址空間布局 &#xff08;三&#xff09;線程終止 &#xff08;四&#xff09;分離線程 &#xff08;一&#xff09;POSIX線程庫 POSIX線程庫&#xff08;POSIX Thread…

Node.js后端構建指南:MongoDB與Express的集成

安裝express 安裝 Express 并將其保存到依賴列表中&#xff1a; $ cnpm install express --save 以上命令會將 Express 框架安裝在當前目錄的 node_modules 目錄中&#xff0c; node_modules 目錄下會自動創建 express 目錄。以下幾個重要的模塊是需要與 express 框架一起安…

nss刷題(4)

1、[SWPUCTF 2021 新生賽]easyrce <?php error_reporting(0); highlight_file(__FILE__); if(isset($_GET[url])) { eval($_GET[url]); } ?> if(isset($_GET[url])) isset函數用來檢測url變量是否存在&#xff1b;$_GET函數獲取變量數據 eval($_GET[url]); eval函數用…

【GIS矢量切片】tippecanoe在Windows和CentOS中的安裝

組件安裝記錄 背景介紹Windows下安裝1、下載工具2、存放安裝包3、進入DOS終端4、在終端執行命令5、下載程序6、放置源碼7、修改配置信息8、編譯9、測試10、參數說明瓦片輸出瓦片描述和權屬信息輸入文件和圖層名輸入文件的并行處理輸入文件的投影縮放級別瓦片分辨率CentOS 7安裝…

嘗試用 GPT-4o 寫 2024高考語文作文

文章目錄 新課標I卷科技進步與問題的演變 新課標II卷抵達未知之境&#xff1a;探索與成長的旅程 全國甲卷坦誠交流&#xff1a;構建真正相遇的橋梁 北京卷歷久彌新 天津卷定義與自定義&#xff1a;在世界的繽紛中前行 上海卷認可度的思考與反思 新課標I卷 閱讀下面的材料&#…