專利名稱:一種保護存儲設(shè)備上數(shù)據(jù)的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機技術(shù)領(lǐng)域,尤其涉及ー種保護存儲設(shè)備上數(shù)據(jù)的方法及裝置。
背景技術(shù):
隨著計算機的廣泛應(yīng)用,存儲設(shè)備變的格外重要。人們利用存儲設(shè)備在計算機設(shè)備與計算機設(shè)備之間傳輸數(shù)據(jù),例如人們用USB存儲器將一臺計算機設(shè)備上的數(shù)據(jù)存入USB存儲器,再將USB存儲器上的數(shù)據(jù)存入另一臺計算機設(shè)備。但是在向存儲設(shè)備上寫入數(shù)據(jù)或從存儲設(shè)備上讀出數(shù)據(jù)時,如果操作不當(dāng),比如,在對存儲設(shè)備沒有讀寫結(jié)束時,將存儲設(shè)備從計算機設(shè)備上移除,將會導(dǎo)致數(shù)據(jù)存儲錯誤,嚴重時可能會導(dǎo)致存儲設(shè)備上的數(shù)據(jù)損壞或丟失?,F(xiàn)有技術(shù)中,操作系統(tǒng)檢測到移除存儲設(shè)備的請求后,在判斷到對存儲設(shè)備的讀 寫沒有完成時,會提示用戶設(shè)備無法移除,但是并不會給出存儲設(shè)備的哪個分區(qū)或者哪個文件沒有讀寫完成,用戶在找不到確切原因后,移除存儲設(shè)備,可能會造成存儲設(shè)備上的數(shù)據(jù)損壞或丟失。如何保護存儲設(shè)備上的數(shù)據(jù),使用戶在確保對存儲設(shè)備的讀取結(jié)束后再移除存儲設(shè)備,以保護存儲設(shè)備上的數(shù)據(jù)的安全,成為ー個待解決的問題。
發(fā)明內(nèi)容
本發(fā)明的主要目的在于提供ー種保護存儲設(shè)備上數(shù)據(jù)的方法及裝置,以解決現(xiàn)有技術(shù)存在的無法準確判斷存儲設(shè)備的哪個分區(qū)或文件沒有讀寫完成,進而不能使用戶在確保存儲設(shè)備的數(shù)據(jù)讀寫完成后移除存儲設(shè)備,導(dǎo)致存儲設(shè)備的數(shù)據(jù)損壞或丟失的問題,其中ー種保護存儲設(shè)備上數(shù)據(jù)的方法,包括根據(jù)預(yù)置的存儲設(shè)備監(jiān)控程序?qū)崟r檢測彈出存儲設(shè)備的命令;當(dāng)檢測到所述彈出存儲設(shè)備的命令吋,確定該命令將要彈出的磁盤分區(qū);確定與將要彈出的磁盤分區(qū)聯(lián)動彈出的目標存儲設(shè)備上的所有磁盤分區(qū),當(dāng)檢測到其中至少ー個磁盤分區(qū)處于活動狀態(tài)時,暫停所述將要彈出的磁盤分區(qū)及目標存儲設(shè)備的彈出操作,提示處于活動狀態(tài)的磁盤分區(qū)的信息以保護該目標存儲設(shè)備上的數(shù)據(jù),其中,所述目標存儲設(shè)備具有至少兩個磁盤分區(qū)。ー種保護存儲設(shè)備上數(shù)據(jù)的裝置,包括監(jiān)控模塊,用于根據(jù)預(yù)置的存儲設(shè)備監(jiān)控程序?qū)崟r檢測彈出存儲設(shè)備的命令;目標存儲設(shè)備確定模塊,用于當(dāng)檢測到所述彈出存儲設(shè)備的命令吋,確定該命令將要彈出的磁盤分區(qū);數(shù)據(jù)保護模塊,用于確定與將要彈出的磁盤分區(qū)聯(lián)動彈出的目標存儲設(shè)備上的所有其他磁盤分區(qū),當(dāng)檢測到其中至少ー個磁盤分區(qū)處于活動狀態(tài)時,暫停所述將要彈出的磁盤分區(qū)及目標存儲設(shè)備的彈出操作,提示處于活動狀態(tài)的磁盤分區(qū)的信息以保護該目標存儲設(shè)備上的數(shù)據(jù),
其中,所述目標存儲設(shè)備具有至少兩個磁盤分區(qū)。本發(fā)明的方法和裝置,根據(jù)預(yù)置的存儲設(shè)備監(jiān)控程序,實時檢測彈出存儲設(shè)備的命令,當(dāng)檢測到所述彈出存儲設(shè)備的命令吋,確定該命令將要彈出的磁盤分區(qū);然后,確定與將要彈出的磁盤分區(qū)聯(lián)動彈出的目標存儲設(shè)備上的所有磁盤分區(qū),當(dāng)檢測到其中至少ー個磁盤分區(qū)處于活動狀態(tài)時,暫停所述將要彈出的磁盤分區(qū)及目標存儲設(shè)備的彈出操作,提示處于活動狀態(tài)的磁盤分區(qū)的信息。避免了在存儲設(shè)備的某些磁盤分區(qū)處于活動狀態(tài)時彈出該存儲設(shè)備導(dǎo)致的存儲設(shè)備上的數(shù)據(jù)損壞或丟失,有效地保護了存儲設(shè)備上的數(shù)據(jù)。
為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖I為根據(jù)本發(fā)明的保護存儲設(shè)備上數(shù)據(jù)的方法的流程示意圖;圖2為操作系統(tǒng)管理設(shè)備的樹狀結(jié)構(gòu)示意圖;圖3為根據(jù)本發(fā)明的保護存儲設(shè)備上數(shù)據(jù)的裝置的結(jié)構(gòu)示意圖。
具體實施例方式下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。下面結(jié)合附圖I詳細對本發(fā)明的技術(shù)方案進行闡述。步驟100,根據(jù)預(yù)置的存儲設(shè)備監(jiān)控程序?qū)崟r檢測彈出存儲設(shè)備的命令。本發(fā)明的存儲設(shè)備監(jiān)控程序通過客戶端軟件的執(zhí)行實現(xiàn),其中,客戶端軟件執(zhí)行的程序包括存儲設(shè)備監(jiān)控程序、目標存儲設(shè)備確定程序、數(shù)據(jù)保護程序等;客戶端為計算機、掌上電腦等。當(dāng)客戶端上的客戶端軟件啟動后,可以實時監(jiān)控存儲設(shè)備,客戶端軟件通過執(zhí)行存儲設(shè)備監(jiān)控程序?qū)崟r檢測彈出存儲設(shè)備的命令,當(dāng)檢測到用戶通過客戶端軟件操作彈出存儲設(shè)備吋,存儲設(shè)備監(jiān)控指令檢測到彈出存儲設(shè)備的命令。步驟101,當(dāng)檢測到所述彈出存儲設(shè)備的命令吋,確定該命令將要彈出的磁盤分區(qū)。本發(fā)明的存儲設(shè)備包括移動硬盤、USB存儲器等具有存儲功能并且可以對存儲空間進行分區(qū)管理的設(shè)備。本實施例以USB存儲器為例進行具體說明,也可以是基于其他接ロ的存儲設(shè)備。該存儲設(shè)備在主機上至少具有兩個磁盤分區(qū),本實施例中,假設(shè)USB存儲器設(shè)備在主機上具有兩個磁盤分區(qū),分別用盤符D和盤符E表示,假設(shè)D盤為待彈出的磁盤分區(qū)。操作系統(tǒng)啟動后,通常會收集所有的設(shè)備數(shù)據(jù),并將設(shè)備數(shù)據(jù)寫入到注冊表中,便于設(shè)備管理。其中也包括磁盤數(shù)據(jù),在操作系統(tǒng)檢測到有存儲設(shè)備接入或者移除后會實時更新磁盤數(shù)據(jù)。在設(shè)備數(shù)據(jù)中,每ー個存儲設(shè)備對應(yīng)ー個唯一的序列號,而每ー個磁盤分區(qū)具有ー個唯一的設(shè)備號,每ー個存儲設(shè)備可以關(guān)聯(lián)多個磁盤分區(qū),即多個設(shè)備號不同的磁盤分區(qū)可能對應(yīng)ー個設(shè)備序列號,當(dāng)其中一個磁盤分區(qū)彈出時,與該磁盤分區(qū)關(guān)聯(lián)的存儲設(shè)備就會聯(lián)動彈出。首先,根據(jù)待彈出的磁盤分區(qū)生成設(shè)備名稱??梢圆捎靡韵潞瘮?shù)StringCchPrintf(szDeviceName, ARRAYSIZE(szDeviceName), L"\\\\. \\%c:",byVolLetter),其中,byVolL etter是盤符,szDeviceName為生成的設(shè)備名稱。然后,調(diào)用文件操作函數(shù)打開該設(shè)備名稱對應(yīng)的設(shè)備,并獲得設(shè)備句柄。具體實施時,可以調(diào)用函數(shù) CreateFile ()獲得設(shè)備句柄,如hDevice=CreateFile (szDeviceName, 0,F(xiàn)ILE_SHARE_READ |FILE_SHARE_WRITE, NULL, 0PEN_EXISTING, 0,NULL),其中,hDevice 即為設(shè)備的句柄。磁設(shè)備的句柄可以作為磁盤分區(qū)的唯一標識,獲得了設(shè)備的句柄,就可以對磁盤分區(qū)進行相關(guān)操作。如果計算機設(shè)備中還有其他類型的可移除設(shè)備,可以通過調(diào)用函數(shù)DeviceIoControl(hDevice, I0CTL_ST0RAGE_QUERY_PR0PERTY, &spq, sizeof(spq),&buffer, sizeof (buffer), &cbBytesReturned, (LPOVERLAPPED) NULL)來獲得設(shè)備的屬性,存儲于spq中,并通過設(shè)備的屬性判斷設(shè)備的接ロ類型是否是USB設(shè)備,本申請僅對USB設(shè)備進行處理。其中,hDevice為設(shè)備句柄。為了后續(xù)操作方便,還可以向該設(shè)備句柄發(fā)送獲取存儲設(shè)備的設(shè)備號的指令,獲得該將要彈出磁盤分區(qū)的設(shè)備號,使用設(shè)備號作為磁盤分區(qū)的唯一標識。可以通過調(diào)用DeviceIoControl ()函數(shù)實現(xiàn)獲得設(shè)備號DeviceIoControl (hDevice, IOCTL_STORAGE_GET_DEVICE_NUMBER, NULL, 0,(LPVOID)&sdn, sizeof (sdn), &cbBytesReturned, (LPOVERLAPPED)NULL),其中,hDevice 為設(shè)備句柄。獲得的D盤的設(shè)備號存儲在數(shù)據(jù)結(jié)構(gòu)sdn中。步驟102,確定與將要彈出的磁盤分區(qū)聯(lián)動彈出的目標存儲設(shè)備上的所有磁盤分區(qū),當(dāng)檢測到其中至少ー個磁盤分區(qū)處于活動狀態(tài)時,暫停所述待彈出的磁盤分區(qū)及目標存儲設(shè)備的彈出操作,提示處于活動狀態(tài)的磁盤分區(qū)的信息以保護該目標存儲設(shè)備上的數(shù)據(jù)。操作系統(tǒng)建立的設(shè)備數(shù)據(jù)可以是列表的形式,也可以是樹狀的結(jié)構(gòu),本實施例以操作系統(tǒng)采用樹狀結(jié)構(gòu)來管理設(shè)備數(shù)據(jù)為例。圖2是操作系統(tǒng)管理設(shè)備的一個樹狀結(jié)構(gòu)示意圖,在這個樹狀結(jié)構(gòu)中,USB設(shè)備由三個磁盤分區(qū),202是USB設(shè)備的一個磁盤分區(qū),對應(yīng)樹狀結(jié)構(gòu)的葉子節(jié)點;201是USB存儲設(shè)備,對應(yīng)樹狀結(jié)構(gòu)的父節(jié)點。以下是ー個通過查找操作系統(tǒng)預(yù)先建立的管理設(shè)備的樹狀結(jié)構(gòu)來確定該目標存儲設(shè)備上的所有其他磁盤分區(qū)的例子。第一歩,枚舉客戶端上的所有磁盤分區(qū),建立所有磁盤分區(qū)對應(yīng)的設(shè)備節(jié)點的集合。調(diào)用 SetupDiGetClassDevs (pGuidlnferface, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)函數(shù),枚舉客戶端的所有磁盤分區(qū)信息,如果SetupDiGetClassDevs ()函數(shù)的第一個參數(shù)為(⑶ID*)&GUID_DEVINTERFACE_DISK,則可以得到客戶端上所有USB存儲器上的磁盤分區(qū)信息。獲得磁盤分區(qū)信息存儲在pGuidlnferface中。第二步,依次獲取所述集合中各設(shè)備節(jié)點對應(yīng)的磁盤分區(qū)的設(shè)備號,確定與將要彈出的磁盤分區(qū)的設(shè)備號相同的節(jié)點為將要彈出的磁盤分區(qū)對應(yīng)的節(jié)點,并將該節(jié)點的父節(jié)點作為目標節(jié)點,即將要聯(lián)動彈出的目標存儲設(shè)備對應(yīng)的節(jié)點。具體實施時,調(diào)用 SetupDiEnumDeviceInterfeces (hlntDevInfo, NULL, pGuidlnferface, dwlndex, &interfaceData)函數(shù)讀取集合中的所有節(jié)點的信息,獲得的節(jié)點信息存儲在interfaceData中,進一步調(diào)用 SetupDiGetDeviceInterfaceDetail (hlntDevInfo, &interfaceData, pinterFaceDetailData, cbBytesReturned, &cbBytesReturned, &DeviceInfoData)函數(shù)き犬得各設(shè)備節(jié)點的詳細信息,其中PlnterFaceDetailData存儲有姆ー個節(jié)點的路徑信息;分別調(diào)用 CreateFileO 函數(shù),通過設(shè)備路徑(pInterFaceDetailData_>DevicePath)打開枚舉的每ー個設(shè)備對應(yīng)的節(jié)點,獲得該節(jié)點對應(yīng)的磁盤分區(qū)的設(shè)備句柄;然后,調(diào)用DeviceIoControl ()函數(shù),控制碼設(shè)為 IOCTL_STORAGE_GET_DEVICE_NUMBER,獲得每ー個節(jié)點對應(yīng)的設(shè)備號。此處獲得的每ー個設(shè)備節(jié)點對應(yīng)的設(shè)備號就是相應(yīng)的磁盤分區(qū)的設(shè)備號。找到與步驟101中獲得的將要彈出磁盤分區(qū)的設(shè)備號相同的那個節(jié)點,就是將要彈出的磁盤分區(qū)對應(yīng)的節(jié)點。在樹狀結(jié)構(gòu)中向上查找,調(diào)用CM_Get_Parent ()函數(shù)獲得該節(jié)點的父節(jié)點,確定該父節(jié)點為將要聯(lián)動彈出的目標存儲設(shè)備對應(yīng)的節(jié)點,作為目標節(jié)點。進ー步調(diào)用CM_Get_Device_ID()可以獲得該目標節(jié)點的標識(ID)。
第三步,分別獲取客戶端上各磁盤分區(qū)對應(yīng)的設(shè)備節(jié)點的父節(jié)點,并將父節(jié)點與目標節(jié)點相同的節(jié)點對應(yīng)的磁盤分區(qū)作為該目標存儲設(shè)備上的磁盤分區(qū)。調(diào)用GetLogicalDriveStringsO函數(shù)獲得計算機上的所有磁盤分區(qū)的盤符信息,調(diào)用StringCchLength ()函數(shù)將獲得的所有盤符信息寫入緩存,等待遍歷。分別從緩存中取出每ー個盤符信息,調(diào)用StringCchPrintfO函數(shù)格式化后,生成設(shè)備名稱;對每ー個設(shè)備名稱,分別調(diào)用CreateFileO函數(shù)獲得所有磁盤分區(qū)的設(shè)備句柄,然后再調(diào)用DeviceIoControl (hDevice, IOCTL_STORAGE_QUERY_PROPERTY, &spq, sizeof(spq),&buffer,sizeof (buffer), &cbBytesReturned, (LPOVERLAPPED) NULL)來獲得設(shè)備的屬性,過濾掉不是USB接ロ的存儲設(shè)備,并進一步調(diào)用DeviceIoControl ()函數(shù)獲得姆一個磁盤分區(qū)對應(yīng)的設(shè)備號。重復(fù)第一步和第二步中的函數(shù)調(diào)用,調(diào)用流程為調(diào)用SetupDiGetClassDevsO枚舉客戶端上的所有磁盤分區(qū),建立所有磁盤分區(qū)對應(yīng)的設(shè)備節(jié)點的集合;順序調(diào)用SetupDiEnumDeviceInterfaces () > SetupDiGetDeviceInterfaceDetai I ()函數(shù)獲得姆一個設(shè)備節(jié)點的詳細信息;調(diào)用CreateFileO函數(shù),通過設(shè)備路徑(plnterFaceDetailData-〉DevicePath)打開枚舉的姆ー個設(shè)備對應(yīng)的節(jié)點,獲得該節(jié)點對應(yīng)的磁盤分區(qū)的設(shè)備句柄;然后,調(diào)用DeviceloControlO函數(shù)獲得姆一個節(jié)點對應(yīng)的設(shè)備號;調(diào)用CM_Get_Parent ()函數(shù)分別獲取每ー個磁盤分區(qū)對應(yīng)的樹狀結(jié)構(gòu)中的節(jié)點的父節(jié)點;并進ー步調(diào)用CM_Get_Device_ID()根據(jù)獲得的父節(jié)點,得到該父節(jié)點的標識。最后,比較獲得的所有磁盤分區(qū)對應(yīng)的節(jié)點的父節(jié)點和獲得的目標節(jié)點,確定父節(jié)點與目標節(jié)點(即將要聯(lián)動彈出的目標存儲設(shè)備對應(yīng)的節(jié)點)相同的節(jié)點對應(yīng)的磁盤分區(qū)為該目標存儲設(shè)備上的磁盤分區(qū)。磁盤分區(qū)對應(yīng)的節(jié)點(葉子節(jié)點)的父節(jié)點對應(yīng)該磁盤分區(qū)所在的物理存儲設(shè)備,所以,父節(jié)點相同,就說明磁盤分區(qū)在同一塊物理存儲設(shè)備(如USB硬盤)上。判斷父節(jié)點是否相同,可以通過比較父節(jié)點的標識實現(xiàn)。本發(fā)明對先獲得將要聯(lián)動彈出的目標存儲設(shè)備對應(yīng)的設(shè)備節(jié)點,還是先獲得所有磁盤分區(qū)對應(yīng)的設(shè)備節(jié)點的父節(jié)點不做限定,只要二者在比較之前獲得即可。本申請中的函數(shù)調(diào)用僅僅是ー個實施例中的函數(shù)調(diào)用,在不同的情況下,可以適當(dāng)?shù)膭h減和増加函數(shù)調(diào)用,因此本實施例中列舉的函數(shù)調(diào)用不應(yīng)視為對本發(fā)明的限定。還可以根據(jù)物理磁盤(即存儲設(shè)備)的序列號,確定該物理磁盤上的其它磁盤分區(qū)。根據(jù)磁盤序列號找其他分區(qū)。具體步驟為首先向?qū)⒁獜棾龅拇疟P分區(qū)的設(shè)備句柄,即步驟101種獲得的句柄,發(fā)送獲取USB設(shè)備序列號指令,得到與將要彈出的磁盤分區(qū)聯(lián)動彈出的目標存儲設(shè)備的序列號;然后,獲得客戶端上的所有磁盤分區(qū),并分別獲得所有磁盤分區(qū)中類型為USB存儲設(shè)備的待過濾磁盤分區(qū)的設(shè)備句柄,通過分別向待過濾磁盤分區(qū)的設(shè)備句柄發(fā)送獲取USB設(shè)備序列號的指令,得到所有待過濾磁盤分區(qū)所在的USB設(shè)備的序列號。通過調(diào)用DeviceloControlO函數(shù),控制碼設(shè)為I0CTL_ST0RAGE_GET_MEDIA_SERIAL_NUMBER可以獲得將要彈出的磁盤分區(qū)所在的USB硬盤的序列號??梢酝ㄟ^調(diào)用GetLogicalDrives O函數(shù)獲得系統(tǒng)中的所有磁盤分區(qū),該函數(shù)的返回值為一個雙字節(jié)的數(shù),該返回值二進制的最低位為I標識A盤存在,次低位為I表示B盤存在,依此類推。然后,獲得所有磁盤分區(qū)的類型,根據(jù)磁盤分區(qū)的類型,進一步過濾掉非硬盤分區(qū)(如軟驅(qū)、光 驅(qū)),剩下的待過濾磁盤分區(qū)為硬盤或移動存儲設(shè)備的磁盤分區(qū)。調(diào)用GetDriveType O函數(shù),可以確定磁盤分區(qū)的類型,如軟驅(qū)、光驅(qū)、硬盤、USB存儲設(shè)備等。最后,再過濾掉待過濾磁盤分區(qū)中不屬于指定物理磁盤的分區(qū),剩下的就是將聯(lián)動彈出的物理磁盤上的磁盤分區(qū)。過濾待過濾磁盤分區(qū)中不屬于指定物理磁盤的分區(qū),可以對待過濾的磁盤分區(qū)分別依次調(diào)用步驟101中的StringCchPrintf O、CreateFile O獲得待過濾磁盤分區(qū)的句柄,然后調(diào)用 DeviceloControlO 函數(shù),控制碼設(shè)為 IOCTL_STORAGE_GET_MEDIA_SERIAL_NUMBER 獲得所有待過濾磁盤分區(qū)所在的USB硬盤的序列號,將獲得每一個待過濾的磁盤分區(qū)所在的USB硬盤的序列號與將要彈出的磁盤分區(qū)聯(lián)動彈出的目標存儲設(shè)備的序列號。序列號相同,說明是同一個USB硬盤。因此,將與D盤(即將要彈出磁盤分區(qū))具有相同的磁盤序列號的磁盤分區(qū)作為同一存儲設(shè)備上的磁盤分區(qū),也是將聯(lián)動彈出的磁盤分區(qū)。確定將聯(lián)動彈出的目標存儲設(shè)備上的所有磁盤分區(qū)后,要判斷各磁盤分區(qū)上是否還有正在使用中的文件,或者尚未關(guān)閉的文件,若某個分區(qū)上還有正在使用或未關(guān)閉的文件,說明該分區(qū)仍處于活動狀態(tài),應(yīng)該暫停彈出,否則可能導(dǎo)致數(shù)據(jù)丟失或文件損壞。當(dāng)檢測到其中至少一個磁盤分區(qū)處于活動狀態(tài)時,暫停所述待彈出的磁盤分區(qū)及目標存儲設(shè)備的彈出操作,提示處于活動狀態(tài)的磁盤分區(qū)的信息以保護該目標存儲設(shè)備上的數(shù)據(jù)。具體可以通過彈出提示框,并顯示準確的磁盤分區(qū)的盤符、在使用中的文件路徑實現(xiàn)。也可以在提示的同時,在計算機上備份處于活動狀態(tài)的磁盤分區(qū)上的在使用或未關(guān)閉的文件數(shù)據(jù),以備恢復(fù)。本發(fā)明要解決的技術(shù)問題是如何保護存儲設(shè)備上的數(shù)據(jù),在確保對存儲設(shè)備的讀取結(jié)束后,即存儲設(shè)備不處于活動狀態(tài)時,再移除存儲設(shè)備,以保護存儲設(shè)備上的數(shù)據(jù)的安全。本發(fā)明采用的技術(shù)方案是根據(jù)預(yù)置的存儲設(shè)備監(jiān)控程序?qū)崟r檢測彈出存儲設(shè)備的命令;當(dāng)檢測到所述彈出存儲設(shè)備的命令時,確定該命令將要彈出的磁盤分區(qū);確定與將要彈出的磁盤分區(qū)聯(lián)動彈出的目標存儲設(shè)備上的所有磁盤分區(qū),當(dāng)檢測到其中至少一個磁盤分區(qū)處于活動狀態(tài)時,暫停所述將要彈出的磁盤分區(qū)及目標存儲設(shè)備的彈出操作,提示處于活動狀態(tài)的磁盤分區(qū)的信息以保護該目標存儲設(shè)備上的數(shù)據(jù)。本實施例中列舉的僅僅是能夠?qū)崿F(xiàn)本方案的一些函數(shù),本領(lǐng)域的技術(shù)人員還可以通過調(diào)用其它函數(shù)來實現(xiàn)獲取磁盤分區(qū)、獲得磁盤分區(qū)的類型、確定磁盤分區(qū)的設(shè)備號等,本發(fā)明對此不作限定。確定該目標存儲設(shè)備上的所有磁盤分區(qū)方法也有很多種,本發(fā)明只列舉了兩個較佳的實施例,不應(yīng)理解為是對本發(fā)明的限定。相應(yīng)于本發(fā)明的方法,本發(fā)明還提供了一種保護存儲設(shè)備上數(shù)據(jù)的裝置,如圖3所示,包括監(jiān)控模塊300,用于根據(jù)預(yù)置的存儲設(shè)備監(jiān)控程序?qū)崟r檢測彈出存儲設(shè)備的命令;目標存儲設(shè)備確定模塊301,用于當(dāng)檢測到所述彈出存儲設(shè)備的命令時,確定該命令將要彈出的磁盤分區(qū);數(shù)據(jù)保護模塊302,用于確定與將要彈出的磁盤分區(qū)聯(lián)動彈出的目標存儲設(shè)備上的所有其他磁盤分區(qū),當(dāng)檢測到其中至少一個磁盤分區(qū)處于活動狀態(tài)時,暫停所述將要彈出的磁盤分區(qū)及目標存儲設(shè)備的彈出操作,提示處于活動狀態(tài)的磁盤分區(qū)的信息以保護該 目標存儲設(shè)備上的數(shù)據(jù)。其中,所述確定該命令將要彈出的磁盤分區(qū)具體為根據(jù)所述命令中的盤符信息生成將要彈出的磁盤分區(qū)的設(shè)備名稱;調(diào)用文件操作函數(shù)打開該設(shè)備名稱對應(yīng)的設(shè)備,獲得將要彈出的磁盤分區(qū)的設(shè)備句柄。所述確定該命令將要彈出的磁盤分區(qū)還可以包括向?qū)⒁獜棾龅拇疟P分區(qū)的設(shè)備句柄發(fā)送獲取設(shè)備號的指令,獲取該命令將要彈出的磁盤分區(qū)的設(shè)備號,將該設(shè)備號作為磁盤分區(qū)的唯一標識,用于后續(xù)操作。較佳地,所述確定與將要彈出的磁盤分區(qū)聯(lián)動彈出的目標存儲設(shè)備上的所有磁盤分區(qū),進一步包括枚舉客戶端上的所有磁盤分區(qū),建立所有磁盤分區(qū)對應(yīng)的設(shè)備節(jié)點的集合;依次獲取所述集合中各設(shè)備節(jié)點對應(yīng)的磁盤分區(qū)的設(shè)備號,確定與將要彈出的磁盤分區(qū)的設(shè)備號相同的節(jié)點為將要彈出的磁盤分區(qū)對應(yīng)的節(jié)點,并將該節(jié)點的父節(jié)點(即將要聯(lián)動彈出的目標存儲設(shè)備對應(yīng)的節(jié)點)作為目標節(jié)點;分別獲取客戶端上各磁盤分區(qū)對應(yīng)的設(shè)備節(jié)點的父節(jié)點,并將父節(jié)點與目標節(jié)點相同的節(jié)點對應(yīng)的磁盤分區(qū)作為該目標存儲設(shè)備上的磁盤分區(qū)?;蛘?,直接通過獲得磁盤分區(qū)所在的物理磁盤的序列號,確定該目標存儲設(shè)備上的所有磁盤分區(qū),具體為向?qū)⒁獜棾龅拇疟P分區(qū)的設(shè)備句柄發(fā)送獲取USB設(shè)備序列號指令,得到與將要彈出的磁盤分區(qū)聯(lián)動彈出的目標存儲設(shè)備的序列號;獲得客戶端上的所有磁盤分區(qū),并分別獲得所有磁盤分區(qū)中的類型為USB存儲設(shè)備的待過濾磁盤分區(qū)的設(shè)備句柄,通過分別向待過濾磁盤分區(qū)的設(shè)備句柄發(fā)送獲取USB設(shè)備序列號的指令,得到所有待過濾磁盤分區(qū)所在的USB設(shè)備的序列號;確定與將要彈出磁盤分區(qū)具有相同序列號的磁盤分區(qū)為該目標存儲設(shè)備上的所有磁盤分區(qū)。當(dāng)檢測到其中至少一個磁盤分區(qū)處于活動狀態(tài)時,暫停所述待彈出的磁盤分區(qū)及目標存儲設(shè)備的彈出操作,提示處于活動狀態(tài)的磁盤分區(qū)的信息以保護該目標存儲設(shè)備上的數(shù)據(jù)。具體可以通過彈出提示框,并顯示準確的磁盤分區(qū)的盤符、在使用中的文件路徑實現(xiàn)。也可以在提示的同時,在計算機上備份處于活動狀態(tài)的磁盤分區(qū)上的在使用或未關(guān)閉的文件數(shù)據(jù),以備恢復(fù)。本申請對此不作限定。本申請中的所述目標存儲設(shè)備為連接于計算機設(shè)備的USB接口的移動存儲設(shè)備,如USB存儲器。所述目標存儲設(shè)備具有至少兩個磁盤分區(qū)。本申請中的保護存儲設(shè)備上數(shù)據(jù)的裝置可以用于客戶端設(shè)備,所述客戶端設(shè)備包括云存儲設(shè)備、個人電腦、手機等移動終端一類,但不限于申請文件中列舉的種類。本說明書中的各個實施例一般采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。本申請可以在由計算機執(zhí)行的計算機可執(zhí)行指令的一般上下文中描述,例如程序模塊或單元。一般地,程序模塊或單元可以包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。一般來說,程序模塊或單元可以由軟件、硬件或兩者的結(jié)合來實現(xiàn)。也可以在分布式計算環(huán)境中實踐本申請,在這些分布式計算環(huán)境中,由通過通信網(wǎng)絡(luò)而被連接的遠程處理設(shè)備來執(zhí)行任務(wù)。在分布式計算環(huán)境中,程序模塊或單元可以位于包括存儲設(shè)備在內(nèi)的本地和遠程計算機存儲介質(zhì)中。最后,還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設(shè)備中還存在另外的相同要素。本文中應(yīng)用了具體個例對本申請的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本申請的方法及其主要思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請的思想,在具體實施方式
及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本申請的限制。
權(quán)利要求
1.ー種保護存儲設(shè)備上數(shù)據(jù)的方法,其特征在于,包括 根據(jù)預(yù)置的存儲設(shè)備監(jiān)控程序?qū)崟r檢測彈出存儲設(shè)備的命令; 當(dāng)檢測到所述彈出存儲設(shè)備的命令吋,確定該命令將要彈出的磁盤分區(qū); 確定與將要彈出的磁盤分區(qū)聯(lián)動彈出的目標存儲設(shè)備上的所有磁盤分區(qū),當(dāng)檢測到其中至少ー個磁盤分區(qū)處于活動狀態(tài)時,暫停所述將要彈出的磁盤分區(qū)及目標存儲設(shè)備的彈出操作,提示處于活動狀態(tài)的磁盤分區(qū)的信息以保護該目標存儲設(shè)備上的數(shù)據(jù), 其中,所述目標存儲設(shè)備具有至少兩個磁盤分區(qū)。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述確定該命令將要彈出的磁盤分區(qū)具體為 根據(jù)所述命令中的盤符信息生成將要彈出的磁盤分區(qū)的設(shè)備名稱; 調(diào)用文件操作函數(shù)打開該設(shè)備名稱對應(yīng)的設(shè)備,獲得將要彈出的磁盤分區(qū)的設(shè)備句柄。
3.根據(jù)權(quán)利要求I或2所述的方法,其特征在干, 所述確定該命令將要彈出的磁盤分區(qū)還包括向?qū)⒁獜棾龅拇疟P分區(qū)的設(shè)備句柄發(fā)送獲取存儲設(shè)備的設(shè)備號的指令,獲取該命令將要彈出的磁盤分區(qū)的設(shè)備號; 所述確定與將要彈出的磁盤分區(qū)聯(lián)動彈出的目標存儲設(shè)備上的所有磁盤分區(qū),進ー步包括 枚舉客戶端上的所有磁盤分區(qū),建立所有磁盤分區(qū)對應(yīng)的設(shè)備節(jié)點的集合; 依次獲取所述集合中各設(shè)備節(jié)點對應(yīng)的磁盤分區(qū)的設(shè)備號,確定與將要彈出的磁盤分區(qū)的設(shè)備號相同的節(jié)點為將要彈出的磁盤分區(qū)對應(yīng)的節(jié)點,并將該節(jié)點的父節(jié)點作為目標節(jié)點; 分別獲取客戶端上各磁盤分區(qū)對應(yīng)的設(shè)備節(jié)點的父節(jié)點,并將父節(jié)點與目標節(jié)點相同的節(jié)點對應(yīng)的磁盤分區(qū)作為該目標存儲設(shè)備上的磁盤分區(qū)。
4.根據(jù)權(quán)利要求1-3中任一項所述的方法,其特征在于,所述確定與將要彈出的磁盤分區(qū)聯(lián)動彈出的目標存儲設(shè)備上的所有磁盤分區(qū),進ー步包括 向?qū)⒁獜棾龅拇疟P分區(qū)的設(shè)備句柄發(fā)送獲取USB設(shè)備序列號指令,得到與將要彈出的磁盤分區(qū)聯(lián)動彈出的目標存儲設(shè)備的序列號; 獲得客戶端上的所有磁盤分區(qū),井分別獲得所有磁盤分區(qū)中類型為USB存儲設(shè)備的待過濾磁盤分區(qū)的設(shè)備句柄,通過分別向待過濾磁盤分區(qū)的設(shè)備句柄發(fā)送獲取USB設(shè)備序列號的指令,得到所有待過濾磁盤分區(qū)所在的USB設(shè)備的序列號; 確定與將要彈出磁盤分區(qū)具有相同序列號的磁盤分區(qū)為該目標存儲設(shè)備上的所有磁盤分區(qū)。
5.ー種保護存儲設(shè)備上數(shù)據(jù)的裝置,其特征在于,包括 監(jiān)控模塊,用于根據(jù)預(yù)置的存儲設(shè)備監(jiān)控程序?qū)崟r檢測彈出存儲設(shè)備的命令; 目標存儲設(shè)備確定模塊,用于當(dāng)檢測到所述彈出存儲設(shè)備的命令吋,確定該命令將要彈出的磁盤分區(qū); 數(shù)據(jù)保護模塊,用于確定與將要彈出的磁盤分區(qū)聯(lián)動彈出的目標存儲設(shè)備上的所有其他磁盤分區(qū),當(dāng)檢測到其中至少ー個磁盤分區(qū)處于活動狀態(tài)時,暫停所述將要彈出的磁盤分區(qū)及目標存儲設(shè)備的彈出操作,提示處于活動狀態(tài)的磁盤分區(qū)的信息以保護該目標存儲設(shè)備上的數(shù)據(jù), 其中,所述目標存儲設(shè)備具有至少兩個磁盤分區(qū)。
6.根據(jù)權(quán)利要求5所述的裝置,其特征在干,所述確定該命令將要彈出的磁盤分區(qū)具體為 根據(jù)所述命令中的盤符信息生成將要彈出的磁盤分區(qū)的設(shè)備名稱; 調(diào)用文件操作函數(shù)打開該設(shè)備名稱對應(yīng)的設(shè)備,獲得將要彈出的磁盤分區(qū)的設(shè)備句柄。
7.根據(jù)權(quán)利要求5或6所述的裝置,其特征在干, 所述確定該命令將要彈出的磁盤分區(qū),還包括向?qū)⒁獜棾龅拇疟P分區(qū)的設(shè)備句柄發(fā)送獲取設(shè)備號的指令,獲取該命令將要彈出的磁盤分區(qū)的設(shè)備號; 所述確定與將要彈出的磁盤分區(qū)聯(lián)動彈出的目標存儲設(shè)備上的所有磁盤分區(qū),進ー步包括 枚舉客戶端上的所有磁盤分區(qū),建立所有磁盤分區(qū)對應(yīng)的設(shè)備節(jié)點的集合; 依次獲取所述集合中各設(shè)備節(jié)點對應(yīng)的磁盤分區(qū)的設(shè)備號,確定與將要彈出的磁盤分區(qū)的設(shè)備號相同的節(jié)點為將要彈出的磁盤分區(qū)對應(yīng)的節(jié)點,并將該節(jié)點的父節(jié)點作為目標節(jié)點; 分別獲取客戶端上各磁盤分區(qū)對應(yīng)的設(shè)備節(jié)點的父節(jié)點,并將父節(jié)點與目標節(jié)點相同的節(jié)點對應(yīng)的磁盤分區(qū)作為該目標存儲設(shè)備上的磁盤分區(qū)。
8.根據(jù)權(quán)利要求5-7中任一項所述的裝置,其特征在于,所述確定與將要彈出的磁盤分區(qū)聯(lián)動彈出的目標存儲設(shè)備上的所有磁盤分區(qū),進ー步包括 向?qū)⒁獜棾龅拇疟P分區(qū)的設(shè)備句柄發(fā)送獲取USB設(shè)備序列號指令,得到與將要彈出的磁盤分區(qū)聯(lián)動彈出的目標存儲設(shè)備的序列號; 獲得客戶端上的所有磁盤分區(qū),井分別獲得所有磁盤分區(qū)中的類型為USB存儲設(shè)備的待過濾磁盤分區(qū)的設(shè)備句柄,通過分別向待過濾磁盤分區(qū)的設(shè)備句柄發(fā)送獲取USB設(shè)備序列號的指令,得到所有待過濾磁盤分區(qū)所在的USB設(shè)備的序列號; 確定與將要彈出磁盤分區(qū)具有相同序列號的磁盤分區(qū)為該目標存儲設(shè)備上的所有磁盤分區(qū)。
9.一種客戶端設(shè)備,其特征在于,包括如權(quán)利要求5-8中任一項所述的裝置。
全文摘要
本發(fā)明公開了一種保護存儲設(shè)備上數(shù)據(jù)的方法及裝置,涉及計算機技術(shù)領(lǐng)域,解決了現(xiàn)有技術(shù)中存在的無法準確判斷存儲設(shè)備的哪個分區(qū)或文件沒有讀寫完成,進而不能使用戶在確保存儲設(shè)備的數(shù)據(jù)讀寫完成后移除存儲設(shè)備,導(dǎo)致存儲設(shè)備的數(shù)據(jù)損壞或丟失的問題。所述方法包括根據(jù)預(yù)置的存儲設(shè)備監(jiān)控指令實時檢測彈出存儲設(shè)備的命令;當(dāng)檢測到所述彈出存儲設(shè)備的命令時,確定將要彈出的磁盤分區(qū);確定與將要彈出的磁盤分區(qū)聯(lián)動彈出的目標存儲設(shè)備上的所有磁盤分區(qū),當(dāng)檢測到其中至少一個磁盤分區(qū)處于活動狀態(tài)時,暫停所述將要彈出的磁盤分區(qū)及目標存儲設(shè)備的彈出操作,提示處于活動狀態(tài)的磁盤分區(qū)的信息以保護該目標存儲設(shè)備上的數(shù)據(jù)。
文檔編號G06F12/16GK102866964SQ20121034836
公開日2013年1月9日 申請日期2012年9月18日 優(yōu)先權(quán)日2012年9月18日
發(fā)明者吉艷敏, 寧敢, 余和 申請人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司