Я получил небезопасную сборку с помощью easyhook в c # .. этот код работает хорошо
но сумма времени, я получил NullReferenceException, когда этот метод вызывается ..
Экземпляр этого класса - шаблон Singleton
Прошло несколько раз, и одна точка получила нулевую ссылку
Этот класс, если для перехвата любой записи в некоторый файл ввода / вывода выполнить какую-либо операцию
Любые идеи
Смотрите код ..
происходит только при выполнении SQLCOMMAND
at .... SystemHook.WriteFileHook (IntPtr hFile, Void * lpBuffer, UInt32
nNumberOfBytesToWrite, UInt32 & lpNumberOfBytesWritten,
NativeOverlapped & lpOverlapped)
в
SNIWriteSyncOverAsync (SNI_ConnWrapper *, SNI_Packet *)
в
SNINativeMethodWrapper.SNIWritePacket (SafeHandle pConn, SafeHandle
пакет, логическая синхронизация)
at
System.Data.SqlClient.TdsParserStateObject.SNIWritePacket (SNIHandle
дескриптор, пакет SNIPacket, UInt32 & sniError, логическое canAccumulate,
Boolean callerHasConnectionLock)
at
System.Data.SqlClient.TdsParserStateObject.WriteSni (Boolean
может накапливаться)
на
System.Data.SqlClient.TdsParserStateObject.WritePacket (Byte flushMode,
Boolean canAccumulate)
at
System.Data.SqlClient.TdsParserStateObject.ExecuteFlush ()
в
System.Data.SqlClient.TdsParser.TdsExecuteSQLBatch (текст строки, Int32
тайм-аут, SqlNotificationRequesttificationRequest,
TdsParserStateObject stateObj, логическая синхронизация, логическая
callerHasConnectionLock, Byte [] enclavePackage)
в
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior
cmdBehavior, RunBehavior runBehavior, логическое returnStream, логическое
async, Int32 timeout, Task & task, логическое asyncWrite, логическое inRetry,
SqlDataReader ds, Boolean descriptionParameterEncryptionRequest)
в
System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior
cmdBehavior, RunBehavior runBehavior, логическое returnStream, строка
метод, завершение TaskCompletionSource`1, таймаут Int32, Task & task,
Boolean & usedCache, Boolean asyncWrite, Boolean inRetry)
в
System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior
cmdBehavior, RunBehavior runBehavior, логическое returnStream, строка
метод)
на
System.Data.SqlClient.SqlCommand.ExecuteReader (CommandBehavior
поведение, строковый метод)
at
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader (CommandBehavior
поведение)
в System.Data.Common.DbCommand.ExecuteReader ()
bool WriteFileHook(IntPtr hFile, void* lpBuffer, uint nNumberOfBytesToWrite, out uint lpNumberOfBytesWritten, [In] ref System.Threading.NativeOverlapped lpOverlapped)
{
bool results = false;
bool write = true;
lpNumberOfBytesWritten = 0; // CRASH!!!
...
}