NTSTATUS save(PUNICODE_STRING pData, PUNICODE_STRING pFilename)
{
NTSTATUS ns;
HANDLE hFile;
OBJECT_ATTRIBUTES obj_attributes;
IO_STATUS_BLOCK io_sb;
LARGE_INTEGER offset = {0};
InitializeObjectAttributes(
&obj_attributes,
pFilename,
OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
NULL,
NULL);
ns = ZwCreateFile(
&hFile,
GENERIC_WRITE,
&obj_attributes,
&io_sb,
NULL,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_READ,
FILE_OPEN_IF,
FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT,
NULL,
NULL);
if ( !NT_SUCCESS(ns) )
{
DbgPrint("zcf fail!/r/n");
return ns;
}
ns = ZwWriteFile(
hFile,
NULL,
NULL,
NULL,
&io_sb,
pData->Buffer,
pData->Length,
&offset,
NULL);
if ( !NT_SUCCESS(ns) )
{
DbgPrint("zwf fail!/r/n");
return ns;
}
ns = ZwClose(hFile);
if ( !NT_SUCCESS(ns) )
{
DbgPrint("zc fail!/r/n");
return ns;
}
return ns;
}