void CNewFilesBox::Clear(void)
{
	m_OutFiles = m_ExitCode = 0;
	m_Checker.Clear();
	delete m_Proc;
	m_Proc = NULL;
	PurgeQueue();
	gtk_label_set_text(GTK_LABEL(m_Line1), "");
	gtk_label_set_text(GTK_LABEL(m_Line2), "");
}
CFileObject::~CFileObject()
{
    //
    // The object is bound to the file handle and so this happens after close and the 
    // framework guarentees all requests on the file handle are cancelled prior to close
    //
    EnterCriticalSection(&m_RoleLock);
    NT_ASSERT(m_Request == nullptr);
    LeaveCriticalSection(&m_RoleLock);

    PurgeQueue();

    SAFE_DELETEARRAY(m_pszType);
    SAFE_DELETE(m_pConnection);

    DeleteCriticalSection(&m_RoleLock);

    m_FileObject = nullptr;
}
//
// Destructor
//
CNewFilesBox::~CNewFilesBox(void)
{
	g_mutex_lock(m_DataMutex);
	if (m_Thread) {
		m_StopThread = true;
		g_cond_signal(m_Cond);
		g_mutex_unlock(m_DataMutex);
		gdk_threads_unlock();
		g_thread_join(m_Thread);
		gdk_threads_lock();
		g_mutex_lock(m_DataMutex);
		m_Thread = NULL;
	}
	g_mutex_unlock(m_DataMutex);
	delete m_Proc;
	delete m_Con;
	PurgeQueue();
	g_async_queue_unref(m_Queue);
	g_mutex_free(m_DataMutex);
	g_cond_free(m_Cond);
}
NTSTATUS CFileObject::Disable()
{
    MethodEntry("void");
    
    NTSTATUS Status = STATUS_SUCCESS;

    EnterCriticalSection(&m_RoleLock);

    NT_ASSERT(IsPublication() || IsSubscription());

    if (!m_fEnabled) {
        Status = STATUS_INVALID_DEVICE_STATE;
        goto Exit;
    }

    m_fEnabled = FALSE;
    CompleteRequest(STATUS_CANCELLED, 0, true);
    PurgeQueue();

Exit:
    LeaveCriticalSection(&m_RoleLock);
    MethodReturn(Status, "Status = %!STATUS!", Status);
}