यदि आप अपनी फाइलों की बुलेटप्रूफ सुरक्षा चाहते हैं, तो केवल फ़ोल्डर तक पहुंच की रक्षा करना पर्याप्त नहीं है, तो आपको उन्हें एन्क्रिप्ट करना होगा और बाजार में सुरक्षित कंटेनर और फ़ाइल सिस्टम एन्क्रिप्शन होंगे।
यदि इसे उच्च सुरक्षा की आवश्यकता नहीं है, तो आप विंडोज़ में अनुमान लगा सकते हैं। आपको विशेष रूप से निर्देशिका सूची फ़ंक्शंस, जैसे FindFirstFile, FindNextFile और OpenFile में भी हुक करने की आवश्यकता होगी (और FindFirstFileW जैसे उनके व्युत्पन्न में) और शायद कुछ अन्य।
आप है कि कॉल पुनः निर्देशित अपने कस्टम कार्यों के लिए kernel32.dll करने से, एक छोटे से कोड उदाहरण है जिसके नीचे मैं इंटरनेट पर पाया देखें:
unsigned char Store[10];
//redirect FindNextFileW to your custom function
void HookAPI()
{
DWORD OldProtect, NewProtect = PAGE_EXECUTE_READWRITE;
HMODULE hmod = GetModuleHandle("Kernel32.dll");
long pa = (long)GetProcAddress(hmod,"FindNextFileW");
long pa2 = (long)MyFindNextFile;
long dAddr = pa2 - pa - 5;
unsigned char *p = (unsigned char *)pa;
unsigned char *p2 = (unsigned char *)(&dAddr);
VirtualProtect((void *)pa,5,NewProtect,&OldProtect);
for (int i=0;i<5;i++)
Store[i] = p[i];
p[0] = (unsigned char)0xE9;
for (int i=0;i<4;i++)
p[i + 1] = p2[i];
VirtualProtect((void *)pa,5,OldProtect,&NewProtect);
}
void UnHookAPI()
{
DWORD OldProtect, NewProtect = PAGE_EXECUTE_READWRITE;
HMODULE hmod = GetModuleHandle("Kernel32.dll");
long pa = (long)GetProcAddress(hmod,"FindNextFileW");
unsigned char *p = (unsigned char *)pa;
VirtualProtect((void *)pa,5,NewProtect,&OldProtect);
for (int i=0;i<5;i++)
p[i] = Store[i];
VirtualProtect((void *)pa,5,OldProtect,&NewProtect);
}
BOOL WINAPI MyFindNextFile(HANDLE hFindFile,LPWIN32_FIND_DATAW lpFindFileData)
{
UnHookAPI();
BOOL ans = FindNextFileW(hFindFile, lpFindFileData);
//your logic here, display password prompt to user e.g.
HookAPI();
return ans;
}
क्या आप क्या करना चाहते भी जावा के साथ किया जा सकता है (जेएनआई) या सी # (पिनवोक), लेकिन यह एक वास्तविक चक्कर आ जाएगा। मैं कुछ ऐसा उपयोग करता हूं जिसे देशी कोड में संकलित किया जा सकता है।
संपादित करें: Aoi Karasu एक पोस्ट जो एक FileSystemFilterDriver, जो शायद सबसे अच्छा अवधारणा प्रश्न में आवेदन का एहसास है उपयोग करने के लिए पता चलता है के लिए एक लिंक प्रदान की है।
क्या आपका मतलब है कि आपका प्रोग्राम एक सेवा होने जा रहा है और फ़ोल्डर से संबंधित सभी उपयोगकर्ता क्रियाएं आपकी सेवा के माध्यम से करनी चाहिए? मुश्किल लगता है ... –
@ आर्मेन Tsirunyan - हाँ, ऐसा कहा जा सकता है। कुछ फ़ोल्डर्स पासवर्ड सुरक्षित होंगे, कुछ नहीं। –
यहां एक मुश्किल सवाल है (और मुझे लगता है कि समाधान एक एन्क्रिप्शन ड्राइवर है): एलिस और बॉब एन्क्रिप्टेड फ़ोल्डर एफ के साथ मशीन से जुड़े हुए हैं एलिस को पता है कि एफ और बॉब के पासवर्ड को एफ के लिए पासवर्ड नहीं पता है बॉब "अजीब" तरीकों (cmd.exe या अपने स्वयं के अनुप्रयोग) में फ़ोल्डर में प्रवेश करने की कोशिश करता है और एन्क्रिप्टेड फाइलें पाता है, जैसा कि उन्हें होना चाहिए। ऐलिस एफ के लिए पासवर्ड डालें, इसलिए आप फ़ाइलों को डिक्रिप्ट करते हैं। अब, आप फ़ाइलों को कैसे डिक्रिप्ट करते हैं और यह सुनिश्चित करते हैं कि बॉब उन्हें छूने में सक्षम नहीं होगा? किसी भी तरह यह सुनिश्चित करना है कि जिन उपयोगकर्ताओं के पास एफ तक पहुंच नहीं है, वे इसे एक्सेस नहीं कर पाएंगे! – TCS