public const UInt32 GENERIC_READ = 0x80000000;
public const UInt32 GENERIC_WRITE = 0x40000000;
public const UInt32 OPEN_EXISTING = 3;
public const UInt32 FILE_ATTRIBUTE_NORMAL = 0x80;
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr CreateFile(string FileName, UInt32 DesiredAccess, UInt32 ShareMode, IntPtr SecAttrs, UInt32 CreationDisposition, UInt32 FlagsAndAttributes, IntPtr TemplateFile);
IntPtr hFile = CreateFile("filename.ext", GENERIC_READ, 0, IntPtr.Zero, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, IntPtr.Zero);
API OpenFile
подскажите плз, как с помощью API функции OpenFile закрыть доступ на чтение/запись к файлу/папке. Когда-то находил и задавал вопрос как блокировать диски и сидюк, дык потерял примеры.
Передать 0 в качестве параметра dwShareMode?
А можно показать кодом(DLLImport и пример вызова), а то уже забыл как это делать, а мои ссылки на сайты недавно накрылись.
Код:
Чавось я могу через проводник туда зайти. Знач это не то. Тогда вопрос ставлю так: как запретить чтение/запись в файл/папку временно.
Код:
[DllImport(
"kernel32.dll",
SetLastError = true,
EntryPoint = "CreateFileA"
)]
internal static extern IntPtr CreateFile(
String filename,
UInt32 desiredAccess,
UInt32 shareMode,
IntPtr attributes, // Really, this is the SECURITY_ATTRIBUTES pointer
UInt32 creationDisposition,
UInt32 flagsAndAttributes,
IntPtr templateFile
);
private const uint FILE_FLAG_BACKUP_SEMANTICS = 0x02000000;
private const uint FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000;
const uint FILE_FLAG_POSIX_SEMANTICS = 0x01000000;
private void button3_Click(object sender, EventArgs e)
{
IntPtr h = CreateFile(@"E:\test", GENERIC_READ, 0, IntPtr.Zero, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_POSIX_SEMANTICS, IntPtr.Zero);
MessageBox.Show(h.ToString());
CloseHandle(h);
}
"kernel32.dll",
SetLastError = true,
EntryPoint = "CreateFileA"
)]
internal static extern IntPtr CreateFile(
String filename,
UInt32 desiredAccess,
UInt32 shareMode,
IntPtr attributes, // Really, this is the SECURITY_ATTRIBUTES pointer
UInt32 creationDisposition,
UInt32 flagsAndAttributes,
IntPtr templateFile
);
private const uint FILE_FLAG_BACKUP_SEMANTICS = 0x02000000;
private const uint FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000;
const uint FILE_FLAG_POSIX_SEMANTICS = 0x01000000;
private void button3_Click(object sender, EventArgs e)
{
IntPtr h = CreateFile(@"E:\test", GENERIC_READ, 0, IntPtr.Zero, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_POSIX_SEMANTICS, IntPtr.Zero);
MessageBox.Show(h.ToString());
CloseHandle(h);
}
Теперь такой вопрос - как мне освободить файл/папку, если они уже используються