Не могли бы вы опубликовать больше кода?Пока не совсем ясно, что здесь происходит, но вот несколько соображений:
1) Вы начинаете с того, что говорите, что создаете мьютекс с NtCreateMutant
, но код, который вы разместили, использует NtOpenMutant
.Пожалуйста, уточните, что именно вы здесь делаете, желательно с большим фрагментом кода.
2) NtCreateMutant
не принимает 3 параметра, а NtOpenMutant
не принимает логический 3-й параметр:
+NTSTATUS SERVICECALL
+NtCreateMutant(OUT PHANDLE MutantHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+ IN BOOLEAN InitialOwner);
+
+NTSTATUS SERVICECALL
+NtOpenMutant(OUT PHANDLE MutantHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes);
Непонятно, что вы намереваетесь использовать, но оно будет отображаться независимо от того, что вы хотели использовать, вы можете использовать его неправильно.
Если вы действительно хотите использовать NtOpenMutant
, может показаться, что вашим третьим параметром должна быть структура OBJECT_ATTRIBUTES, определенная ЗДЕСЬ :
typedef struct _OBJECT_ATTRIBUTES {
ULONG Length;
HANDLE RootDirectory;
PUNICODE_STRING ObjectName;
ULONG Attributes;
PVOID SecurityDescriptor;
PVOID SecurityQualityOfService;
} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
Имейте в виду, что функции Nt * не являются точными зеркаламиобщедоступный и документированный Windows API.Кажется, именно здесь вы испытываете свои проблемы.