2011-09-14 10 views
1

假設您對第三方密封組件有一個方法或屬性,它需要一個文件名。您沒有第三方組件的源代碼。您希望該組件在您的文件上執行應該執行的操作(只讀),但是您的文件在磁盤上進行了加密,並且只需要內存中的解密版本,因此無法以簡單形式輕鬆進行復制。當對象需要文件名時,是否可以取代MemoryStream或StreamReader? (C#/。NET)

是否有可能創建一個包裝或其他方法來誘使組件從文件讀取時認爲它正在從文件讀取?還是完全不可能?本地Windows代碼可以在.NET之外完成嗎?

感謝

+1

你可以調查命名管道服務器,但這是相當多的工作,並不保證工作...或者嘗試一個http服務器;它會採取一個http地址? –

+1

命名管道當然可以工作,@「\\。\ pipe \ somename」。這種謬論認爲內存中的東西不在磁盤上。不是Windows如何工作,它在分頁文件中。否則不需要SecureString。 –

+0

感謝您對命名管道的建議,這聽起來很有希望。關於Web服務器的建議,我應該在原文中提到,需要發生的機器位於另一個與外部服務器通信的環境中,而不是一個選項。 –

回答

0

是否有可能創建一個包裝或者一些其他的方法來欺騙 組件認爲它從文件中讀取時,它實際上是從一個MemoryStream閱讀 ?

不,對不起。您將不得不將文件解密爲臨時文件,然後將此臨時文件傳遞給插件。一旦它完成工作,刪除臨時文件。

2

你不能做到這一點,你所建議的方式,沒有。我的建議是使用windows內置的Encrypting Filesystem功能。這種方式文件以加密形式存儲在磁盤上,但通過正常的IO方法可用於應用程序(前提是運行應用程序的帳戶可以訪問該文件)。

+0

另一種使文件系統看起來像文件系統的方法是使用WebDAV重定向器(http://en.wikipedia.org/wiki/Webdav)並指向實現DAV協議(本質上是Web服務器)的數據源。 –

0

你可以看看Dokan。我沒有嘗試過,但它是在.Net中創建虛擬文件系統的一種方式。

1

它可以讀取「CON」作爲輸入(像很多文本工具grep/findstr,more,...)嗎?在這種情況下,您可以嘗試重定向輸入/輸出流並以某種方式提供結果。

0

您可以創建一個內存中的磁盤驅動器(代碼或通過使用第三方應用程序)並在其中放置一個文件。另一種方法是實現虛擬文件系統並處理所有文件請求。兩種方法都是可行的,例如使用我們的Virtual Storage產品。另外,我並不特別瞭解.NET,但在Windows中,您可以掛接API函數並替換某些操作(包括文件操作)。甚至有這樣的組件,但是,我不知道他們是否提供了.NET的功能。

相關問題