Я занимался переносом кода с Linux на Windows. Я использую среду Visual Studio. Я застрял с одной проблемой.
В Windows есть вызов функции с 2 параметрами для получения и освобождения семафора.
Код Linux имеет один параметр
Окна:
KeInitializeSpinLock(spinlock,oldIRQL);
Linux
spin_lock_init(spinlock);
У меня есть общий вызов, который я должен использовать:
Get_Lock(spinlock);
Как мне сделать это для Windows без изменения прототипа Get_Lock
?
Я попробовал следующее:
#define Get_Lock(lock) \
KIRQL oldIrql;\
KeAcquireSpinLock(&(lock),&oldIrql);
#define Release_Lock(sync) KeReleaseSpinLock(&(sync),oldIrql)
Но компилятор выдает ошибки .. В основном я хочу сохранить значение oldIrql
, потому что это значение необходимо для KeReleaseSpinLock
Error
error C2275: 'KIRQL' : illegal use of this type as an expression
error C2146: syntax error : missing ';' before identifier 'oldIrql'
error C2065: 'oldIrql' : undeclared identifier
error C2065: 'oldIrql' : undeclared identifier
error C2065: 'oldIrql' : undeclared identifier
KIRQL
определяется как
typedef UCHAR KIRQL
Что я здесь не так делаю? Или есть какой-то другой метод, который можно использовать, не меняя прототип Get_Lock
и Release_Lock
?