『壹』 linux系統下如何安裝colinerscan 和syscan的環境
你好Linux系統下安裝colinerscan 和syscan的環境的話,你必須首先安裝這個軟體的驅動才可以,安裝了驅動在安裝軟體按提示一步步操作就行了
『貳』 在LINUX下怎樣使用COM組件
COM組件技術在Linux C++下的使用例子
COM的介面
一. 介面概念的出現
承接COM的目的,現在需要將重用的COM對象相互關聯在一起,那麼有什麼好方法呢?
(1)OO中使用public成員來讓外界和內部對象進行數據交互。COM中更進一步,只能使用public的成員函數。因為直接訪問對象內存不利於實行低耦合的模型,所以數據的交互都應該使用函數調用。
(2)一個COM對象可以提供多個函數供外部調用,這是很自然的。
(3}類似於OO中的多態,一個函數可以被多個COM對象實現,這樣調用方可以方便統一的實現所需的功能。
在C++中,我們用public成員函數來提供對外介面,用虛函數來實現多態。因此,對COM的要求,實際上就是需要一個虛基類,其定義了一組函數,然後COM類來繼承這個基類,從而也擁有了這組函數。而當COM類要有多個供外界調用的函數時,可以把這些函數分別定義在一些虛基類中,然後再用多重繼承的方法使COM類擁有這些函數。
盡管對每個函數都去定義一個虛基類也毫無不可,但很多時候這樣分散並不利於管理這些函數。因此常常把一組功能有關聯的函數合並在一個虛基類裡面。
這個只擁有一組虛函數的基類就是COM中的介面,其目的是定義COM對象被訪問的方法。每個介面都被一個GUID標識,稱為IID。
二. 介面的本質
如果把C++描述轉化成二進制代碼的話,就會發現介面本質上就是vtable,位於COM對象的開頭,指向一組函數指針。那麼為什麼是介面而不是單個函數被GUID表識,從而能夠被准確定位呢?
還是參考C++編寫的COM對象在內存中的二進製表示吧。此時其開頭是一列指針,分別對應於多重繼承而來的各個介面,然後每個指針指向一個函數指針數組,就是對應於各個介面的成員函數。因此,介面和對象在內存中是平級的!C++實現多重繼承時只不過是羅列了多個虛函數表,然後調用函數時再根據具體使用的指針類型,給指向對象的指針加上某個偏移量得到該類型對應的虛函數表,再找到具體的函數。顯然指針在介面這一層時可以很自如的通過偏移得到其它的介面指針以及對象指針——而一旦得到具體函數指針後,就很難回頭了。
COM規定了一個函數QueryInterface(),用來得到介面的指針。並把QueryInterface()放入介面類IUnknown中,而且規定所有的介面都要從IUnknown繼承,換句話說,所有的介面都要實現IUnknown類定義的那幾個函數。QueryInterface()的引入可以讓調用方在使用COM對象時,能夠在COM對象提供的介面之間自由的來回切換。當然,正如上面所述,其本質只是指向介面的指針做了偏移而已。
三. 介面的使用方法
首先,所有COM對象的介面都繼承自IUnknown,而IUnknown中是有QueryInterface()函數的。
再次,COM對象的開頭就是第一個介面的vtable,所以指向COM對象的指針同時也是指向第一個介面的指針。並且,由於介面都是繼承自IUnknown,因此這個指針也一定是指向IUnknown的指針。這樣一來的話就能夠順利調用QueryInterface(),得到某個介面的指針了。
然後,不管任何時候,只要有某介面的指針,就可以接著用QueryInterface()來得到該COM對象擁有的其它介面指針。
類廠以及COM對象的構造
二. 類廠概念的引入
類廠(ClassFactory)這個名詞其實有點迷惑性,因為這個東西實際上應該叫對象工廠。類廠也是一個普通的COM對象,它有一個特殊的介面IClassFactory,這個介面的一個函數CreateInstance()能夠生成COM對象,並返回其需要的介面。
如果把C++中的概念平移過來,就會發現類廠的作用本質上就是那個被C++編譯器隱藏了的new。在COM中沒有類定義,自然也沒有new,要想生成COM對象,只能靠COM類的規范。類廠就實現了從COM類規范到COM對象的過程。
當用C++實現COM的時候,往往在類廠也就是new出來一個對象,然後做一個QueryInterface()得到介面指針。表面上看,中間多了類廠這么一層有點多此一舉,實際上這里隱含了根據抽象的COM類在內存中生成COM對象的步驟,絕非可有可無的。
三. 類廠的返回值
在前面說過COM中以COM對象為單位實行重用,COM對象通過介面和外界交互,COM對象的介面之間可以通過偏移來實現跳轉。並且,從二進制上看,指向COM對象的指針就是指向COM對象繼承的第一個介面的指針。所以,在COM中並不需要一個指向COM對象的指針,而只需要指向該COM對象的某一個介面的指針。因此類廠最後是返回COM對象的一個介面指針來告訴用戶,這個COM對象已經生成了。當然,這個介面指針的表識(IID)需要用戶提供。
COM對象的調用
AddRef和Release
一. IUnknown介面
按照COM標准,所有的COM介面的前三個函數都必須是IUnknown介面的那三個函數:QueryInterface(),AddRef()和Release()。如果用C++表述的話,就是所有的COM介面都必須從IUnknown這個虛基類繼承而來。
QueryInterface()的作用前面已經說過了,是根據IID查詢當前COM對象是否有此介面,並返回介面指針。那麼AddRef()和Release()呢?
按照字面的意思,AddRef()的意思就是說增加當此介面被引用的次數,而Release()則是釋放。實際上也差不多就是這么回事……雖然Release()表面上看起來起一個SubRef()的名字能夠更加和AddRef()匹配一點。
二. COM對象的創建過程和引用計數的需求
如果按照一般的思想,COM對象被創建後,大家自由使用就是了,為了什麼非要引入AddRef()和Release()函數?其實這里涉及到的問題主要是COM對象的生存期問題。一個COM對象何時被誰創建?何時又被誰釋放呢?
最自然的回答肯定是需要時創建以實現應用,不需要時釋放以節約系統資源。但是這里實現就有很多問題:首先,按照前面所述,客戶並不真正的了解COM對象,它只能提供CLSID來定位COM對象,提供IID來查詢介面,然後能做的就是利用介面實現功能。在Windows的COM庫中,用CoCreateInstance()函數來封裝客戶端的調用,然後CoCreateInstance()根據CLSID在注冊表中找到實現該對象保存的文件,再根據調用方式的不同(進程內/進程外)將該文件裝載入內存,創建類廠,然後用類廠的CreateInstance()介面創建COM對象並返回IID指定的介面。這一連串的工作分的很細,主要的目的就是用中間層,比如COM庫函數和標准IClassFactory介面等隔開用戶和具體COM對象,實現更好地封裝。
既然如此,具體生成COM對象的並不是客戶端而是COM組件中和COM對象對應的類廠對象。因此,釋放或者說從內存中卸載COM對象的任務也不能是客戶端完成。而在COM組件中,類廠只管生成,那麼釋放的任務就只能交給COM對象自己完成了。
所以,最後的要求就變成了COM對象自己需要知道什麼時候能夠釋放自身,那麼就需要有一個量來表示現在到底又多少用戶在使用此COM對象,這就是引用計數了。
三. 引用計數的實現
實現引用計數的方法很簡單,用一個全局的變數來保存計數,多一個引用時加一,少一個引用時減一。COM規定當創建COM對象時先把計數從0加到1,然後加加減減,直到計數變到0,說明已經沒有用戶使用該COM對象,那麼這個就可以釋放資源了。
由於客戶端只能對介面操作,因此AddRef()和Release()需要保證能夠在任何介面下都能調用,包括IUnknown。這樣一來,這兩個函數和QueryInterface()並列成為IUnknown的三個成員也就順理成章了。
這里還有一些小問題。比如說是針對COM對象整體計數呢,還是針對各個介面計數?COM標准沒有硬性規定,但是作為COM對象的使用者,客戶端必須考慮到不同情況,所以必須是調用增加或減少引用的那個介面的AddRef()和Release()。
COM實現的技術,主要是C++的虛函數、多繼承以及動態鏈接庫(DLL)技術。
COM組件的實現:
項目代碼如下;
類廠頭文件
鏈表類廠 頭文件 ListClassFactory.h
/*************************************************************************
> File Name: ListClassFactory.h
> Created Time: 2016年09月12日 23時53分23秒 CST
************************************************************************/
#ifndef _LIST_CLASS_FACTORY_H
#define _LIST_CLASS_FACTORY_H
#include "../../ibasecom/IUnknown.h"
#include "../../ibasecom/IClassFactory.h"
class ListClassFactory : public IClassFactory
{
private:
ULONG m_cRef;
public:
ListClassFactory(){LogD("ListClassFactory: ","===ListClassFactory()===");}
~ListClassFactory(){LogD("ListClassFactory: ","====~ListClassFactory()=======");}
private:
virtual LONG QueryInterface(const IID& iid, void** ppv);
virtual ULONG AddRef();
virtual ULONG Release();
virtual IUnknown* CreateInstance(const IID& iid,void**ppv);
};
#ifdef __cplusplus
extern "C"
{
#endif
IUnknown* DllGetClassObject(const CLSID &clsid, const IID &iid, void **ppv);
IUnknown* (*g_CoCreate)(const IID& iid,void** ppv) = NULL;
#ifdef __cplusplus
}
#endif
#endif
Vector類廠 頭文件 VectorClassFactory.h
/*************************************************************************
> File Name: VectorClassFactory.h
> Created Time: 2016年08月26日 23時50分23秒 CST
************************************************************************/
#ifndef _VECTOR_CLASS_FACTORY_H
#define _VECTOR_CLASS_FACTORY_H
#include "../../ibasecom/IUnknown.h"
#include "../../ibasecom/IClassFactory.h"
class VectorClassFactory : public IClassFactory
{
private:
ULONG m_cRef;
public:
VectorClassFactory(){LogD("VectorClassFactory: ","===VectorClassFactory()===");}
~VectorClassFactory(){LogD("VectorClassFactory: ","====~VectorClassFactory()=======");}
private:
virtual LONG QueryInterface(const IID& iid, void** ppv);
virtual ULONG AddRef();
virtual ULONG Release();
virtual IUnknown* CreateInstance(const IID& iid,void**ppv);
};
#ifdef __cplusplus
extern "C"
{
#endif
IUnknown* DllGetClassObject(const CLSID &clsid, const IID &iid, void **ppv);
IUnknown* (*g_CoCreate)(const IID& iid,void** ppv) = NULL;
#ifdef __cplusplus
}
#endif
#endif
類廠實現文件 ListClassFactory.cpp
『叄』 linux的幾個版本分別有什麼用呢
紅旗是國產的Linux操作系統,基於Redhat7.2開發的,你提到的4.0和4.1都是較老的版本,現在的最新版本是6.0
共創Linux也是國產的Linux,好處在於有在Windows下安裝的程序,使得從來沒使用過Linux的用戶有一條可以安裝Linux的簡便之路。
這四個版本屬於兩個家族,每個家族之內並沒有太多值得敘述的差別,只是版本的更新。
紅旗的Linux更加適合初學者使用,但是它沒有共創在安裝時的優勢。
『肆』 7 系統裝 coLinux 一運行就藍屏,怎麼回事
1、電腦出現藍屏一般為CPU太熱、灰塵、病毒、硬碟有壞道、內存問題、驅動問題、顯卡問題。
2、在開始菜單運行中輸入msconfig回車,在啟動里將所有(除ctfmon)對勾都去掉保存重啟動試試(可以加快啟動速度),一般是啟動運行程度太多,或文件沖突、內存佔用問題。
3、開機一直按F8進入安全模式查殺病毒木馬,現在網上十個毒有九個是木馬,所以殺毒軟體和防木馬軟體並重。
4、散熱不好,重新安裝CPU散熱片,可能接觸不良,可更換CPU風扇。
5、更換內存,或把內存上的灰塵清一清、重新拔插一下。
6、如果發現有硬碟撞擊聲,後藍屏,說明硬碟有壞道。
7、還有就是打開軟體藍屏,可以先把這個軟體卸載或重新裝一下試試。
8、更新顯卡驅動。
9、如果玩游戲藍屏,除以上,再一個就可能電腦顯卡或內存配置低,升級顯卡和內存。
『伍』 coLinux安裝的問題
echo > /etc/udev/rules.d/70-persistent-net.rules
然後重啟reboot
可以解決系統沒有eth0的問題
因為虛擬網卡的mac地址因為重裝後改了系統卻只知道老網卡的物理地址導致識別不到eth0
『陸』 Colinux程序在win7 64位下如何運行
試試在Win7 X64裡面安裝windows xp mode或者vm,在windows xp mode或者vm中安裝運行colinux。
『柒』 colinux是虛擬機嗎
不是虛擬機.
CoLinux(Cooperative Linux 的縮寫)是第一種免費使用和開源的解決方案,它讓Linux更好的運行在Microsoft Windows 本機系統下。通常的, colinux是Linux內核使自己友好的和其它操作系統共同運行在一台機器上的一條通道。例如,我們不需要第三方的商業虛擬機軟體(例如vmware)就可以自由的在windows 2000/xp/vista/7上運行Linux,這是不使用虛擬機軟體的最佳方式。
『捌』 如何增加colinux內存
在目錄下找到setting.conf用記事本打開
有mem=128 你把128改到你想要的大小,然後保存就行了。
『玖』 請教,關於colinux 下安裝ubuntu的步驟
安裝的話都很簡單,主要下載colinux的ext文件及所要安裝系統的image就行了。
安裝好之後,新建一個配置文件ubuntu.conf:
kernel=vmlinux
cobd0=Ubuntu-9.04.ext3.1gb.fs
root=/dev/cobd0
ro
initrd=initrd.gz
mem=256
eth0=tuntap
基本上參考example.conf文件就行了,但是eth0=tuntap一項比較重要,關繫到能否連網及ssh。
運行colinux-daemon.ext @ubuntu.conf
由於9.04版本的ubuntu已停止維護了,此時執行apt-get update得到的都是一堆ign的錯誤,所以得改一下源/etc/apt/source.list
deb http://old-releases.ubuntu.com/ubuntu/ hoary main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ hoary-security main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ hoary-updates main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ hoary-proposed main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu/ hoary-backports main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ hoary main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ hoary-security main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ hoary-updates main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ hoary-proposed main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ hoary-backports main restricted universe multiverse
另一個國內的9.04可用源
deb http://mirrors.ustc.e.cn/ubuntu-old-releases/ubuntu/ jaunty main restricted universe multiverse
deb http://mirrors.ustc.e.cn/ubuntu-old-releases/ubuntu/ jaunty-security main restricted universe multiverse
deb http://mirrors.ustc.e.cn/ubuntu-old-releases/ubuntu/ jaunty-updates main restricted universe multiverse
deb http://mirrors.ustc.e.cn/ubuntu-old-releases/ubuntu/ jaunty-proposed main restricted universe multiverse
deb http://mirrors.ustc.e.cn/ubuntu-old-releases/ubuntu/ jaunty-backports main restricted universe multiverse
擴展colinux的磁碟大小,Ubuntu9.04鏡像自帶的磁碟文件只有1g,明顯不夠用。
安裝vim失敗之後,居然連vi都不能用了,解決辦法:apt-get remove vim
apt-get install vim
dpkg -i --force-all /var/cache/apt/archives/vim-common_1%3a7.1.293-3_i386.deb
dpkg -i --force-all /var/cache/apt/archives/vim-runtime_1%3a7.1.293-3_all.deb
dpkg -i --force-all /var/cache/apt/archives/vim_1%3a7.1.293-3_i386.deb
IIS7伺服器管理工具可以批量管理、定時上傳下載、同步操作、數據備份、到期提醒、自動更新。IIS7伺服器管理工具適用於Windows操作系統和liunx操作系統;支持Vnc客戶端和Ftp客戶端批量操作。