Почему RtlCopyMemory не удалось

Все, я пытался использовать RtlCopyMemory для дублирования экземпляра структуры, но, похоже, он не скопировал успешно экземпляр до возврата обратного вызова. Я не знаю, если я что-то пропустил, пожалуйста, помогите просмотреть код ниже. Благодарю.

#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
#define RtlCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length))

typedef struct _FLT_RELATED_OBJECTS {

USHORT CONST Size;
USHORT CONST TransactionContext;            //TxF mini-version
PFLT_FILTER CONST Filter;
PFLT_VOLUME CONST Volume;
PFLT_INSTANCE CONST Instance;
PFILE_OBJECT CONST FileObject;
PKTRANSACTION CONST Transaction;

} FLT_RELATED_OBJECTS, *PFLT_RELATED_OBJECTS;

FLT_POSTOP_CALLBACK_STATUS
CreateBackUpFile_WhenPostCreatedCallback (
_Inout_ PFLT_CALLBACK_DATA Data,
_In_ PCFLT_RELATED_OBJECTS FltObjects,
_In_ PVOID CompletionContext,
_In_ FLT_POST_OPERATION_FLAGS Flags
)
{
PFLT_RELATED_OBJECTS copiedRelatedObj;
...
RtlZeroMemory(&copiedRelatedObj, FltObjects->Size);
KdBreakPoint();
RtlCopyMemory(&copiedRelatedObj,FltObjects,FltObjects->Size);
DbgPrint("The file name in the FltObjects is : %s\n",FltObjects->FileObject->FileName);
DbgPrint("The file name in the Duplicated FltObjects is : %s\n",copiedRelatedObj->FileObject->FileName);
...
}

0

Решение

RtlZeroMemory требует указатель в блок памяти в качестве первого аргумента. Но вы даете это указатель на указатель (поскольку PFLT_RELATED_OBJECTS уже является указателем). использование

FLT_RELATED_OBJECTS copiedRelatedObj;
1

Другие решения

   PFLT_RELATED_OBJECTS copiedRelatedObj;

copiedRelatedObj переменная является указатель. Это не инициализировано. Кричите немного невидимых программистов Microsoft C за эту ужасную привычку объявлять типы указателей. Затем удалите P. Fix:

   FLT_RELATED_OBJECTS copiedRelatedObj;
1

По вопросам рекламы [email protected]