分类目录
文章索引模板
对WINDOWS各种版本的SSDT HOOK - 八月 21, 2009 by yippee


对WINDOWS各种版本的SSDT HOOK






高手不要BS我,菜鸟必看

WINDOWS各种版本的SSDT序列号不同HOOK可能搞错了 会让系统崩溃

所以考虑这个就写了个 ,不知道网上有没有解决这个的不管了先把自己写的发上来,

原理:我知道在SYS载入的时候 导入表载入的函数就是真实的地址

我先枚举SSDT并找回原地址 一个一个的IF 然后返回 索引号就这样。。。。。


代码就不全发了只发部分。。。。

ULONG GetKernelBaseAddress(char* lpszModule)
{
       NTSTATUS nResult;
       ULONG ulNeededSize, uLoop, uKernelAddr;
       PMODULE_LIST pModuleList;

       uKernelAddr = 0;
       ZwQuerySystemInformation(11, &ulNeededSize, 0, &ulNeededSize);
       pModuleList = (PMODULE_LIST)ExAllocatePool(NonPagedPool, ulNeededSize);
       nResult = ZwQuerySystemInformation(11, pModuleList, ulNeededSize, NULL);

       if (NT_SUCCESS(nResult))
       {
            uKernelAddr = pModuleList->aSM[0].Base;
            strcpy(lpszModule,”\\SystemRoot\\System32\”);
            strcat(lpszModule,pModuleList->aSM[0].ModuleNameOffset+pModuleList->aSM[0].ImageName);
       }

       ExFreePool(pModuleList);

       return uKernelAddr;
}
ULONG RVAToRaw(PVOID lpBase,ULONG VirtualAddress)
{
       IMAGE_DOS_HEADER *pDosHeader;
       IMAGE_NT_HEADERS *pNtHeader;
       IMAGE_SECTION_HEADER *pSectionHeader;
       ULONG NumOfSections,uLoop;
       pDosHeader=(IMAGE_DOS_HEADER*)lpBase;
       if (pDosHeader->e_magic != IMAGE_DOS_SIGNATURE)
            return 0;
       pNtHeader=(IMAGE_NT_HEADERS*)((unsigned char*)lpBase+pDosHeader->e_lfanew);
       NumOfSections=pNtHeader->FileHeader.NumberOfSections;
       pSectionHeader = (IMAGE_SECTION_HEADER*)((ULONG)pNtHeader + sizeof(ULONG) + sizeof(IMAGE_FILE_HEADER) + pNtHeader->FileHeader.SizeOfOptionalHeader);
       VirtualAddress -= (ULONG)lpBase;
       for (uLoop=0;uLoop<NumOfSections;uLoop++)
       {
            pSectionHeader = (IMAGE_SECTION_HEADER*)((ULONG)pSectionHeader + sizeof(IMAGE_SECTION_HEADER) * uLoop);
            if(VirtualAddress>pSectionHeader->VirtualAddress&&VirtualAddress<pSectionHeader->VirtualAddress+pSectionHeader->SizeOfRawData)
            {
                     ULONG Offset = VirtualAddress-pSectionHeader->VirtualAddress + pSectionHeader->PointerToRawData;
                     return Offset;
            }
       }
       return 0;
}
ULONG FindFunctionIndexForSSDT(PVOID FunctionAddress)
{
       char szKernelPath[260];
       ULONG uKernelMoule,uImageBase,uSSDTCount,uSSDTBase,uSSDTRaw,uLoop,uOldAddress,uNewAddress;
       PULONG lpArraySSDT;
       ANSI_STRING KernelFileName;
       UNICODE_STRING uFileName;
       OBJECT_ATTRIBUTES ObjAttr;
       HANDLE hFile=NULL;
       NTSTATUS status;
       IO_STATUS_BLOCK ioStatus;
       FILE_POSITION_INFORMATION FilePos;
       memset(szKernelPath,0,260);
       uKernelMoule=GetKernelBaseAddress(szKernelPath);
       uImageBase   = ((IMAGE_NT_HEADERS*)(uKernelMoule + ((IMAGE_DOS_HEADER*)uKernelMoule)->e_lfanew))->OptionalHeader.ImageBase;
       dprintf(“Kernel ImageBase: 0x%.8X”, uImageBase);
       dprintf(“Kernel Base: 0x%.8X”, uKernelMoule);
       dprintf(“Kernel Module Path: %s”, szKernelPath);
       uSSDTCount = KeServiceDescriptorTable->NumberOfService;
       uSSDTBase   = (ULONG)KeServiceDescriptorTable->ServiceTableBase;
       dprintf(“SSDT BaseAddress: 0x%8X, SSDT Count: 0x%X”, uSSDTBase, uSSDTCount);
       lpArraySSDT =(PULONG) ExAllocatePool(PagedPool, uSSDTCount * sizeof(ULONG));
       if (lpArraySSDT == NULL) return 0;
       uSSDTRaw = RVAToRaw((PVOID)uKernelMoule, uSSDTBase);
       dprintf(“SSDT RAW: 0x%.8X”, uSSDTRaw);
       if (uSSDTRaw == 0)
       {
            DbgPrint(“SSDT RAW Error”);
            ExFreePool(lpArraySSDT);
            return 0;
       }
       RtlInitAnsiString(&KernelFileName,szKernelPath);
       if (!NT_SUCCESS(RtlAnsiStringToUnicodeString(&uFileName, &KernelFileName, TRUE)))
       {
            DbgPrint(“RtlAnsiStringToUnicodeString Error”);
            ExFreePool(lpArraySSDT);
            return 0;
       }
       InitializeObjectAttributes(&ObjAttr, &uFileName, OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE, NULL, NULL);
       if (NT_SUCCESS(ZwOpenFile(&hFile, FILE_READ_DATA, &ObjAttr, &ioStatus, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, FILE_SYNCHRONOUS_IO_NONALERT)) && hFile)
       {

            FilePos.CurrentByteOffset.LowPart = uSSDTRaw;
            FilePos.CurrentByteOffset.HighPart = 0;
            status = ZwSetInformationFile(hFile, &ioStatus, &FilePos, sizeof(FILE_POSITION_INFORMATION), FilePositionInformation);
            if (NT_SUCCESS(status))
            {
                     status = ZwReadFile(hFile, NULL, NULL, NULL, &ioStatus, lpArraySSDT, uSSDTCount * sizeof(ULONG), NULL, NULL);
                     if (NT_SUCCESS(status))
                     {
                               for (uLoop=0; uLoop<uSSDTCount; uLoop++)
                               {
                                    uOldAddress = *(lpArraySSDT + uLoop) – uImageBase + uKernelMoule;
                                    uNewAddress = *((PULONG)uSSDTBase + uLoop);

                                             if(uOldAddress==(ULONG)FunctionAddress)
                                             {
                                                       ZwClose(hFile);
                                                       RtlFreeUnicodeString(&uFileName);
                                                       ExFreePool(lpArraySSDT);
                                                       return uLoop;
                                             }
                                   
                               }

                     }
                     else
                     {
                               if(hFile)
                                    ZwClose(hFile);
                     }
            }

       }
       RtlFreeUnicodeString(&uFileName);
       ExFreePool(lpArraySSDT);
       return 0;

}
VOID WriteSSDTHook(ULONG Service_Index,PVOID NewAddress,ULONG *OldAddress)
{
       ULONG Address;

       DbgPrint(“RunHook – NewAddress:0x%00X – Service_Index:0x%0X”,NewAddress,Service_Index);

       Address = (ULONG)KeServiceDescriptorTable->ServiceTableBase + Service_Index * 4;

       *OldAddress = *(ULONG*)Address;

       // 去掉内存保护
       __asm
       {
            cli
                     mov eax, cr0
                     and eax, not 10000h
                     mov cr0, eax
       }
       *((ULONG*)Address) = (ULONG)NewAddress;

       // 恢复内存保护
       __asm
       {
            mov eax, cr0
                     or eax, 10000h
                     mov cr0, eax
                     sti
       }
}
VOID RemoveHook(ULONG Service_Index,PVOID Service_Address)
{
       ULONG Address;

       Address = (ULONG)KeServiceDescriptorTable->ServiceTableBase + Service_Index * 4;

       __asm
       {
            cli
                     mov eax, cr0
                     and eax, not 10000h
                     mov cr0, eax
       }

       *((ULONG*)Address) = (ULONG)Service_Address;

       __asm
       {
            mov eax, cr0
                     or eax, 10000h
                     mov cr0, eax
                     sti
       }

}

标签:, , , ,
20090105 windows media service - 八月 18, 2009 by yippee

组播流媒体服务器--可下载 – 服务应用交流版 – 中国网管论坛 – 全国网管乃一家 – bbs.bitsCN.com
http://bbs.bitscn.com/106721

Microsoft Windows Media – Web Server vs. Streaming Server
http://www.microsoft.com/windows/windowsmedia/compare/webservvstreamserv.aspx

搭建windows media service组播服务器_Simple life of Dugu
http://hi.baidu.com/dugu072/blog/item/d89afd253ee9da6235a80f5b.html

Windows Media streams and RTSP protocol rollover problem
http://all-streaming-media.com/streaming-media-faq/faq-rtsp-protocol-rollover-problem.htm

天空上的彩色
http://wwdjr.blogbus.com/archives/9469_2.html

[转帖]亲密接触WINDOWS MEDIA SERVICE 9 – 襄樊DV联盟[热] – 中国DV玩家大本营-1394论坛 DV论坛&line;中国领先的DV器材网上交易市场和DV人社区&line;二手DV&line;数码摄像机&line;高清摄像机&line;HDV&line;影视制作&line;非线性编辑&line;1394卡&line;电视台&line;电影制作&line;premiere&line;DVD&line;影视广告&line;电视专题&line;婚庆摄像&line;纪录片&line;非编&line;影视素材 – Powered by Discuz!
http://www.1394bbs.com/thread-10005-1-1.html

WIN2K Media多播服务器到底哪个是多播? Windows专区 / Windows NT/2000/XP/2003 – CSDN社区 community.csdn.net
http://topic.csdn.net/t/20020906/22/1003364.html

[原创]基于组播的流媒体服务器——一台服务器支持上千用户[千家论坛 -- 系统集成论坛]
http://www.1000bbs.com/dispbbs.asp?boardid=3&ID=278229

请问有用DY成功实现组播试验的么&关于桥接的几个问题 – Dynamips 7200 路由模拟器讨论专区 – 工大瑞普Cisco网络技术论坛 南京&line;Cisco培训&line;工大瑞普&line;CCNA&line;CCNP&line;CCSP&line;CCIE&line;dynamips – Powered by Discuz!
http://ciscobbs.njut.edu.cn/bbs/viewthread.php?tid=9047&extra=page%3D1

一“举”多“得”—利用Windows Media实现IP组播(图) – futurecolor_非常色彩 – futurecolor – 和讯博客
http://futurecolor.blog.hexun.com/1828043_d.html

如何自己制作一个组播服务器?
http://topic.csdn.net/u/20081006/10/4097e9cf-5020-4cac-9157-874163f888a9.html

Index of /pub/videolan/vlc/0.9.2/win32/
http://download.videolan.org/pub/videolan/vlc/0.9.2/win32/

漫步·荒·红 – cyhzhl
http://cache.baidu.com/c?m=9d78d513d9861af30eb0d13f1a16a6394e02db302bd7a1542894d71fd3735b305010e6ac50290774d3d20f6015e80902e5aa7034751421c486d58e4bd9b0932224893034074cd81c47c419d8c84224d620e70bb4f004&p=8c67ce16d9c301ff57e7853b51&user=baidu#baidusnap3

关于windows Media server流媒体服务器 – cyhzhl的日志 – 网易博客
http://43693893.blog.163.com/blog/static/9679008200851833044179/

实况流的推传递功能 – cyhzhl的日志 – 网易博客
http://43693893.blog.163.com/blog/static/9679008200851832950942/

更改2003上传限制 – cyhzhl的日志 – 网易博客
http://43693893.blog.163.com/blog/static/9679008200851832848537/

计算机世界网-周报全文-如何搭建流媒体服务器
http://www2.ccw.com.cn/05/0542/d/0542d04_1.asp

一“举”多“得”—利用Windows Media实现IP组播(图) – futurecolor_非常色彩 – futurecolor – 和讯博客
http://futurecolor.blog.hexun.com/1828043_d.html

组播流媒体服务器--可下载 – 服务应用交流版 – 中国网管论坛 – 全国网管乃一家 – bbs.bitsCN.com
http://bbs.bitscn.com/106721

一种发现组播私设服务器的方法 – 专利之家
http://www.patent-cn.com/2007nov/CN101075897.shtml

服务器端帮助
http://www.mvn.cn/help.htm

SourceForge.net: TortoiseSVN: Downloading …
http://sourceforge.net/project/downloading.php?groupname=tortoisesvn&filename=LanguagePack_1.5.6.14908-win32-zh_CN.msi&use_mirror=nchc

标签:, , ,
20090416 Windows Embedded Standard 2009 - 八月 18, 2009 by yippee

Windows Embedded Standard 2009

安装比较顺利

前面CTP版本的:

~~~
下面这一步非常重要:我在这里被困扰了两个小时……。安装过程需要输入SQL Server Express的名称。我在这里犯了错误(之前一直在用SQL Server),我们要填写计算机名+实例名称,而SQL Server Express安装时,我没有填写实例名称,然后就想当然的认为没有实例名称。不过经过试验,我知道SQL Server Express的数据库名是:计算机名+SQLEXPRESS。
~······

现在是直接检索本机数据库,直接提供出来了,只要进行选择就可以了

看上去4G
但是赶紧和原来的差不多

界面啊,组件之类的·········

http://msdn.microsoft.com/en-us/library/bb521687.aspx
 Installation Error Messages
3/27/2009

The following table shows the error messages you might encounter and the resolutions to correct them when installing Windows Embedded Standard.

http://blog.augustoalvarez.com.ar/2009/03/29/windows-embedded-standard-2009-step-by-step-deployment-part-i/
Windows Embedded Standard 2009 Step-by-Step Deployment – Part I

WES 2009 contains the same kernel as Windows XP with a few improvements:

    * Windows XP kernel with SP3 included
    * Internet Explorer 7
    * Windows Media Player 11
    * Silverlight 1.0
    * .Net Framework 3.5 (including also 1.0, 1.1 and 2.0).
    * IPv6 support

7. Now select the SQL Server where the DB should be stored. I’m selecting it the local SQL Server Express instance already installed. Click on “Next”.

Solution

Wait 5-10 minutes and click on “Retry”.

You don’t believe it? Check this MSDN article about it. It’s related about how the installer access and closes the database during the installation process.

···········

Windows Embedded Standard开发初体验(四) – maning_pub的个人空间 – ITPUB个人空间 – powered by X-Space
http://space.itpub.net/15040223/viewspace-417416

Preparing and Installing Windows XP Embedded Images – Part I: Setting up the Environment « Augusto Alvarez
http://blog.augustoalvarez.com.ar/2009/01/07/preparing-and-installing-windows-xp-embedded-images-part-i-setting-up-the-environment/

Preparing and Installing Windows XP Embedded Images – Part III: Using Remote Boot « Augusto Alvarez
http://blog.augustoalvarez.com.ar/2009/01/07/preparing-and-installing-windows-xp-embedded-images-part-iii-using-remote-boot/

Preparing and Installing Windows XP Embedded Images – Part II: Building Images « Augusto Alvarez
http://blog.augustoalvarez.com.ar/2009/01/07/preparing-and-installing-windows-xp-embedded-images-part-ii-building-images/

标签:, , ,
20090422 c# fade windows - 八月 18, 2009 by yippee

 
  private   void   Form2_Load(object   sender,   System.EventArgs   e)   
  &leftsign;   
  Win32.AnimateWindow(this.Handle,500,   Win32.AW_BLEND);   
  &rightsign;   
  public   class   Win32   
  &leftsign;   
  public   const   Int32   AW_HOR_POSITIVE   =   0×00000001;   
  public   const   Int32   AW_HOR_NEGATIVE   =   0×00000002;   
  public   const   Int32   AW_VER_POSITIVE   =   0×00000004;   
  public   const   Int32   AW_VER_NEGATIVE   =   0×00000008;   
  public   const   Int32   AW_CENTER   =   0×00000010;   
  public   const   Int32   AW_HIDE   =   0×00010000;   
  public   const   Int32   AW_ACTIVATE   =   0×00020000;   
  public   const   Int32   AW_SLIDE   =   0×00040000;   
  public   const   Int32   AW_BLEND   =   0×00080000;   
  [DllImport("user32.dll",   CharSet=CharSet.Auto)]   
  public   static   extern   bool   AnimateWindow(   
  IntPtr   hwnd,   //   handle   to   window   
  int   dwTime,   //   duration   of   animation   
  int   dwFlags   //   animation   type   
  );   
  &rightsign;   
  1.AW_HOR_POSITIVE   =   $00000001;   //   从左向右开屏 
  2.AW_HOR_NEGATIVE   =   $00000002;   //   从右向左开屏 
  3.AW_VER_POSITIVE   =   $00000004;   //   从上向下开屏 
  4.AW_VER_NEGATIVE   =   $00000008;   //   从下向上开屏 
  5,AW_CENTER   =   $00000010;   //   从中心向四周扩展,在关闭动画中则为从四周向中心收缩 
  6.AW_HIDE   =   $00010000;   //   关闭时候与前面的定义组合使用,如AW_HIDE   or   AW_CENTER 
  7.AW_ACTIVATE   =   $00020000;   //   与1-5组合,开屏使用 
  8.AW_SLIDE   =   $00040000;   //   与1-5   +   6/7   组合,产生滑行效果 
  9.AW_BLEND   =   $00080000;   //   Win2000下使用,淡入淡出效果  

“““`
using System;
using System.Drawing;
using System.Windows.Forms;

namespace FadeForm
&leftsign;
    public partial class FadeForm : Form
    &leftsign;

        #region Variables
        /// <summary>
        /// The opacity the form is transitioning to.
        /// </summary>
        private double targetOpacity;

        /// <summary>
        /// The time it takes to fade from 0 to 1 or the other way around.
        /// </summary>
        private double fadeTime = .35;

        /// <summary>
        /// The opacity that the form will transition to when the form gets focus.
        /// </summary>
        private double activeOpacity = 1;

        /// <summary>
        /// the opacity that the form will transition to when the form doesn\’t have focus.
        /// </summary>
        private double inactiveOpacity = .85;

        /// <summary>
        /// the opacity that the form will transition to when the form is minimized.
        /// </summary>
        private double minimizedOpacity = 0;

        /// <summary>
        /// WindowsMessage that is being held until the end of a transition.
        /// </summary>
        private Message heldMessage = new Message();

        /// <summary>
        /// Timer to aid in fade effects.
        /// </summary>
        private System.Windows.Forms.Timer timer;
        #endregion
       
        #region Properties
        /// <summary>
        /// The opacity the form is transitioning to.
        /// </summary>
        public double TargetOpacity
        &leftsign;
            set
            &leftsign;
                targetOpacity = value;
                if (!timer.Enabled) timer.Start();
            &rightsign;
            get &leftsign; return targetOpacity; &rightsign;
        &rightsign;

        /// <summary>
        /// The time it takes to fade from 1 to 0 or the other way around.
        /// </summary>
        public double FadeTime
        &leftsign;
            get &leftsign; return fadeTime; &rightsign;
            set
            &leftsign;
                if (value > 0) fadeTime = value;
                else throw new ArgumentOutOfRangeException("The FadeTime must be a positive value");
            &rightsign;
        &rightsign;

        /// <summary>
        /// The opacity that the form will transition to when the form gets focus.
        /// </summary>
        public double ActiveOpacity
        &leftsign;
            get &leftsign; return activeOpacity; &rightsign;
            set
            &leftsign;
                if (value >= 0) activeOpacity = value;
                else throw new ArgumentOutOfRangeException("The ActiveOpacity must be a positive value"); if (this.ContainsFocus) TargetOpacity = activeOpacity;
            &rightsign;
        &rightsign;

        /// <summary>
        /// the opacity that the form will transition to when the form doesn\’t have focus.
        /// </summary>
        public double InactiveOpacity
        &leftsign;
            get &leftsign; return inactiveOpacity; &rightsign;
            set
            &leftsign;
                if (value >= 0) inactiveOpacity = value;
                else throw new ArgumentOutOfRangeException("The InactiveOpacity must be a positive value"); if (!this.ContainsFocus && this.WindowState != FormWindowState.Minimized) TargetOpacity = inactiveOpacity;
            &rightsign;
        &rightsign;

        /// <summary>
        /// the opacity that the form will transition to when the form is minimized.
        /// </summary>
        public double MinimizedOpacity
        &leftsign;
            get &leftsign; return minimizedOpacity; &rightsign;
            set
            &leftsign;
                if (value >= 0) minimizedOpacity = value;
                else throw new ArgumentOutOfRangeException("The MinimizedOpacity must be a positive value"); if (!this.ContainsFocus && this.WindowState != FormWindowState.Minimized) TargetOpacity = inactiveOpacity;
            &rightsign;
        &rightsign;
        #endregion
       
        /// <summary>
        /// Creates a new FadeForm.
        /// </summary>
        public FadeForm()
        &leftsign;
            this.timer = new System.Windows.Forms.Timer();
            this.SuspendLayout();
            this.timer.Interval = 25;
            this.timer.Tick += new System.EventHandler(this.timer_Tick);
            this.Deactivate += new System.EventHandler(this.FadeForm_Deactivate);
            this.Activated += new System.EventHandler(this.FadeForm_Activated);
            this.Load += new System.EventHandler(this.FadeForm_Load);
        &rightsign;

        /// <summary>
        /// Turns off opacitiy fading.
        /// </summary>
        public void DisableFade()
        &leftsign;
            activeOpacity = 1;
            inactiveOpacity = 1;
            minimizedOpacity = 1;
        &rightsign;

        /// <summary>
        /// Turns on opacitiy fading.
        /// </summary>
        public void EnableFadeDefaults()
        &leftsign;
            activeOpacity = 1;
            inactiveOpacity = .85;
            minimizedOpacity = 0;
            fadeTime = .35;
        &rightsign;

        #region WindowsMessageCodes
        private const int WM_SYSCOMMAND = 0×112;
        private const int WM_COMMAND = 0×111;
        private const int SC_MINIMIZE = 0xF020;
        private const int SC_RESTORE = 0xF120;
        private const int SC_CLOSE = 0xF060;
        #endregion

        /// <summary>
        /// Intercepts WindowMessages before they are processed.
        /// </summary>
        /// <param name="m">Windows Message</param>
        protected override void WndProc(ref Message m)
        &leftsign;
            if (m.Msg==WM_SYSCOMMAND&line;&line;m.Msg == WM_COMMAND)
            &leftsign;
                //Fade to zero on minimze
                if (m.WParam == (IntPtr)SC_MINIMIZE)
                &leftsign;
                    if (heldMessage.WParam != (IntPtr)SC_MINIMIZE)
                    &leftsign;
                        heldMessage = m;
                        TargetOpacity = minimizedOpacity;
                    &rightsign;
                    else
                    &leftsign;
                        heldMessage = new Message();
                        TargetOpacity = activeOpacity;
                    &rightsign;
                    return;
                &rightsign;

                //Fade in if the window is restored from the taskbar
                else if (m.WParam == (IntPtr)SC_RESTORE
                    && this.WindowState == FormWindowState.Minimized)
                &leftsign;
                    base.WndProc(ref m); 
                    TargetOpacity = activeOpacity;
                    return;
                &rightsign;

                //Fade out if the window is closed.
                else if (m.WParam == (IntPtr)SC_CLOSE)
                &leftsign;
                    heldMessage = m;
                    TargetOpacity = minimizedOpacity;
                    return;
                &rightsign;
            &rightsign;
           
            base.WndProc(ref m);
        &rightsign;       

        //Causes the form to fade in.
        private void FadeForm_Load(object sender, EventArgs e)
        &leftsign;
            this.Opacity = minimizedOpacity;
            TargetOpacity = activeOpacity;
        &rightsign;

        //Performs fade increment.
        private void timer_Tick(object sender, EventArgs e)
        &leftsign;
            double fadeChangePerTick = timer.Interval * 1.0 / 1000 / fadeTime;

            //Check to see if it is time to stop the timer
            if (Math.Abs(targetOpacity – this.Opacity) < fadeChangePerTick)
            &leftsign;
                //There is an ugly black flash if you set the Opacity to 1.0
                if (targetOpacity == 1) this.Opacity = .999;
                else this.Opacity = targetOpacity;
                //Process held Windows Message.
                base.WndProc(ref heldMessage);
                heldMessage = new Message();
                //Stop the timer to save processor.
                timer.Stop();
            &rightsign;
            else if (targetOpacity > this.Opacity) this.Opacity += fadeChangePerTick;
            else if (targetOpacity < this.Opacity) this.Opacity -= fadeChangePerTick;
        &rightsign;

        //Fade out the form when it losses focus.
        private void FadeForm_Deactivate(object sender, EventArgs e)
        &leftsign;
            this.TargetOpacity = inactiveOpacity;
        &rightsign;

        //Fade in the form when it gaines focus.
        private void FadeForm_Activated(object sender, EventArgs e)
        &leftsign;
            TargetOpacity = activeOpacity;
        &rightsign;

    &rightsign;
&rightsign;

标签:, ,
20081004 c# socket exitwindowsex - 六月 1, 2009 by yippee

/* Rambling comments… */: Disappointing .Net Sockets article in MSDN Magazine this month
http://www.lenholgate.com/archives/000440.html

CodeProject: Testing TCP and UDP socket servers using C# and .NET. Free source code and programming help
http://www.codeproject.com/KB/IP/testingsocketservers.aspx

观察和理解模糊处理的输出
http://msdn.microsoft.com/zh-cn/ms227212(VS.80).aspx

大家好.谁做过Socket通信这一块.我自己建了个类库.自己感觉就很差.想请高人指点指点. .NET技术 / C# – CSDN社区 community.csdn.net
http://topic.csdn.net/t/20061211/10/5221154.html

c#下的Socket网络通信(类库) (转载) – chenlunpan的个人空间 – ITPUB个人空间 – powered by X-Space
http://space.itpub.net/7380741/viewspace-50965

Mike Woodring\’s .NET Sample Page
http://www.bearcanyon.com/dotnet/#ConnectionLimit

c#socket编程基础 – 一他糊涂 – 博客园
http://www.cnblogs.com/jacktu/archive/2007/11/21/966458.html

C#关机的代码怎样? .NET技术 / C# – CSDN社区 community.csdn.net
http://topic.csdn.net/t/20060225/09/4576395.html

c#关机时提示_百度知道
http://zhidao.baidu.com/question/48204712.html

c#关机 – .net–更高的追求! – 博客园
http://www.cnblogs.com/leewy/articles/52010.html

c#关机时自动退出程序_.Net技术文章_Asp.net_网站开发
http://www.diybl.com/course/4_webprogram/asp.net/netjs/2008823/137205.html
#  /// <summary>
#         /// 操作系统关闭时,关闭应用程序
#         /// </summary>
#         /// <param name="m">截获系统消息</param>
#         protected override void WndProc(ref Message m)
#         &leftsign;
#             switch (m.Msg)
#             &leftsign;
#                 case 0×0011://WM_QUERYENDSESSION
#                     m.Result = (IntPtr)1;
#                     break;
#                 default :
#                     base.WndProc(ref m);
#                     break;
#             &rightsign;           
#         &rightsign;

标签:, , ,

20080307 windows c socket soap - 十二月 5, 2008 by yippee

20080307 windows c socket soap
http://www.yippeesoft.com

#include   "winsock.h" 
#include "stdio.h"
#pragma   comment(lib,"ws2_32.lib") 
#define   winsock_version   0×0101 
void   main() 
&leftsign; 
 //I   create     C:\\Inetpub\\wwwroot\\test\\test.asp   ,start   the   web   service 
 //start   my   program,   the   result   is   OK. 
 //If   it   works,it   is   written   by   masterz,otherwise   I   don\’t   know   who   write   it. 
 SOCKADDR_IN   saServer; 
 LPHOSTENT   lphostent; 
 WSADATA   wsadata; 
 SOCKET   hsocket; 
 int   nRet; 
 const   char*   host_name="www.yippeesoft.com"; 
 // char*   req="POST   /test/test.asp   HTTP/1.0\\r\\n" 
 //  "From:   local\\r\\n" 
 //  "User-Agent:   post_test/1.0\\r\\n" 
 //  "Content-Type:   application/x-www-form-urlencoded\\r\\n" 
 //  "Content-Length:   20\\r\\n\\r\\n" 
 //  "type=12345&name=aaaa"; 
 // char*   req="POST /scbt/jieru.aspx HTTP/1.1\\r\\n" 
 //  "X-Online-Host: www.yippeesoft.com:5566\\r\\n
 //  "Accept: */*\\r\\n" 
 //  "Host: www.yippeesoft.com:5566\\r\\n
 //  "Content-Length: 144\\r\\n\\r\\n" 
 //  "MS4wMAAgMDAxADExMTExMTExMQAAICAgMDAwMDAwMDAwMDAwMTAwODAyMjExMzMwMDEAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg"; 

 char*   req="POST /test/websrvtest/s.asmx HTTP/1.1\\r\\n" 
  "Host: www.yippeesoft.com:5566\\r\\n
  "User-Agent: gSOAP/2.7\\r\\n" 
  "Content-Type: text/xml; charset=utf-8\\r\\n" 
  "Content-Length: 481\\r\\n"
  "Connection: close\\r\\n" 
  "SOAPAction: \\"http://tempuri.org/HelloWorld\\"\\r\\n\\r\\n"

  "<?xml version=\\"1.0\\" encoding=\\"UTF-8\\"?>\\n"
"<SOAP-ENV:Envelope xmlns:SOAP-ENV=\\"http://schemas.xmlsoap.org/soap/envelope/\\" xmlns:SOAP-ENC=\\"http://schemas.xmlsoap.org/soap/encoding/\\" xmlns:xsi=\\"http://www.w3.org/2001/XMLSchema-instance\\" xmlns:xsd=\\"http://www.w3.org/2001/XMLSchema\\" xmlns:ns2=\\"http://tempuri.org/Service1Soap\\" xmlns:ns1=\\"http://tempuri.org/\\" xmlns:ns3=\\"http://tempuri.org/Service1Soap12\\"><SOAP-ENV:Body><ns1:HelloWorld></ns1:HelloWorld></SOAP-ENV:Body></SOAP-ENV:Envelope>";
 
 char   dest[1000]; 
 if(WSAStartup(winsock_version,&wsadata)) 
  printf("can\’t   initial   socket"); 
 lphostent=gethostbyname(host_name); 
 if(lphostent==NULL) 
  printf("lphostent   is   null"); 
 hsocket   =   socket(AF_INET,   SOCK_STREAM,   IPPROTO_TCP); 
 saServer.sin_family   =   AF_INET; 
 //   Use   def.   now,   need   to   handle   general   case 
 saServer.sin_port   =   htons(5566); 
 saServer.sin_addr   =   *((LPIN_ADDR)*lphostent->h_addr_list); 
 nRet   =   connect(hsocket,   (LPSOCKADDR)&saServer,   sizeof(SOCKADDR_IN)); 
 if   (nRet   ==   SOCKET_ERROR) 
 &leftsign; 
  printf("can\’t   connect"); 
  closesocket(hsocket); 
  return; 
 &rightsign; 
 else 
  printf("connected   with   %s\\n",host_name); 
 nRet   =   send(hsocket,   req,   strlen(req),   0); 
 if   (nRet   ==   SOCKET_ERROR) 
 &leftsign; 
  printf("send()   failed"); 
  closesocket(hsocket); 
  
 &rightsign; 
 else 
  printf("send()   OK\\n"); 
 
 nRet=1; 
 while(nRet>0) 
 &leftsign; 
  nRet=recv(hsocket,(LPSTR)dest,sizeof(dest),0); 
  if(nRet>0) 
   dest[nRet]=0; 
  else 
   dest[0]=0; 
  printf("\\nReceived   bytes:%d\\n",nRet); 
  printf("Result:\\n%s",dest); 
 &rightsign; 
&rightsign;  

标签:, , ,
20071129 HTTP  401.1 Windows2003 asp.net - 九月 17, 2008 by yippee

20071129 HTTP  401.1 Windows2003 asp.net
http://www.yippeesoft.com

在Windows2003下调试asp.net程序   出现以下错误: 
  
  您未被授权查看该页 
  您不具备使用所提供的凭据查看该目录或页的权限。   
  ——————————————————————————– 
  
  请尝试以下操作: 
  
  如果您认为自己应该能够查看该目录或页面,请与网站管理员联系。   
  单击刷新按钮,并使用其他凭据重试。   
  HTTP   错误   401.1   -   未经授权:访问由于凭据无效被拒绝。 
  Internet   信息服务   (IIS)  

1,用管理员登陆试下。 
  2,找到站点的文件目录,确定你登陆用户有R/W的权限

IIS设置的问题把! 
  (1)查看IIS管理器中站点安全设置的匿名帐户是否被禁用,如果是,请尝试用以下办法启用:   
  控制面板->管理工具->计算机管理->本地用户和组,将IUSR_机器名账号启用。如果还没有解决,请继续下一步。   
  (2)查看本地安全策略中,IIS管理器中站点的默认匿名访问帐号或者其所属的组是否有通过网络访问服务器的权限,如果没有尝试用以下步骤赋予权限:   
  开始->程序->管理工具->本地安全策略->安全策略->本地策略->用户权限分配,双击“从网络访问此计算机”,添加IIS默认用户或者其所属的组。   
  注意:一般自定义   IIS默认匿名访问帐号都属于组,为了安全,没有特殊需要,请遵循此规则。

  HTTP错误401 – 您未被授权查看该页

 在配置IIS的时候,如果安全稍微做的好一些。就会出现各式各样的问题。比如,常见的访问网页会弹出用户名密码的登陆界面,或者是访问某种页面比如html,asp没事情,但是访问jsp或者php就有问题,显示401.3 ACL 禁止访问资源等  通常的解决办法是。

1、错误号401.1
症状:HTTP 错误 401.1 – 未经授权:访问由于凭据无效被拒绝。
分析:
由于用户匿名访问使用的账号(默认是IUSR_机器名)被禁用,或者没有权限访问计算机,将造成用户无法访问。
解决方案:
(1)查看IIS管理器中站点安全设置的匿名帐户是否被禁用,如果是,请尝试用以下办法启用:
控制面板->管理工具->计算机管理->本地用户和组,将IUSR_机器名账号启用。如果还没有解决,请继续下一步。
(2)查看本地安全策略中,IIS管理器中站点的默认匿名访问帐号或者其所属的组是否有通过网络访问服务器的权限,如果没有尝试用以下步骤赋予权限:
开始->程序->管理工具->本地安全策略->安全策略->本地策略->用户权限分配,双击“从网络访问此计算机”,添加IIS默认用户或者其所属的组。
注意:一般自定义 IIS默认匿名访问帐号都属于组,为了安全,没有特殊需要,请遵循此规则。

2、错误号401.2
症状:HTTP 错误 401.2 – 未经授权:访问由于服务器配置被拒绝。
原因:关闭了匿名身份验证
解决方案:
运行inetmgr,打开站点属性->目录安全性->身份验证和访问控制->选中“启用匿名访问”,输入用户名,或者点击“浏览”选择合法的用户,并两次输入密码后确定。

3、错误号:401.3
症状:HTTP 错误 401.3 – 未经授权:访问由于 ACL 对所请求资源的设置被拒绝。
原因:IIS匿名用户一般属于Guests组,而我们一般把存放网站的硬盘的权限只分配给administrators组,这时候按照继承原则,网站文件夹也只有administrators组的成员才能访问,导致IIS匿名用户访问该文件的NTFS权限不足,从而导致页面无法访问。
解决方案:
给IIS匿名用户访问网站文件夹的权限,方法:进入该文件夹的安全选项,添加IIS匿名用户,并赋予相应权限,一般是读、写。
您未被授权查看该页
您不具备使用所提供的凭据查看该目录或页的权限,因为 Web 浏览器正在发送 Web 服务器未配置接受的 www-Authenticate 报头字段。

请尝试以下操作:

如果您认为自己应该能够查看该目录或页面,请与网站管理员联系。
单击刷新按钮,并使用其他凭据重试。
HTTP 错误 401.2 – 未经授权:访问由于服务器配置被拒绝。
Internet 信息服务 (IIS)

技术信息(为技术支持人员提供)

转到 Microsoft 产品支持服务并搜索包括“HTTP”和“401”的标题。
打开“IIS 帮助”(可在 IIS 管理器 (inetmgr) 中访问),然后搜索标题为“关于安全”、“身份验证”和“关于自定义错误消息”的主题。

只要一打开WEB这个目录就不行
换个名子就可以了~!
晕~1
把WEB这个目录删了
你在打

还是您未被授权查看该页
换个就可以了/~!

IIS特有的问题

在IIS中选中这个文件夹点右键-属性-执行许可选“纯脚本”试试

iis里你的虚拟目录,属性-〉目录安全性-〉编辑身份验证和访问控制

网站属性里把“目录安全”-点“身分验证和访问控制”-“编辑”-去掉“启用匿名访问“钩去了就可以了

很多朋友在用IIS6架网站的时候遇到不少问题,而这些问题有些在过去的IIS5里面就遇到过,有些是新出来的,俺忙活了一下午,做了很多次试验,结合以前的排错经验,做出了这个总结,希望能给大家帮上忙:)
问题1:未启用父路径
症状举例:
Server.MapPath() 错误 \’ASP 0175 : 80004005\’
不允许的 Path 字符
/0709/dqyllhsub/news/OpenDatabase.asp,行 4
在 MapPath 的 Path 参数中不允许字符 \’..\’。
原因分析:
许多Web页面里要用到诸如../格式的语句(即回到上一层的页面,也就是父路径),而IIS6.0出于安全考虑,这一选项默认是关闭的。
解决方法:
在IIS中 属性->主目录->配置->选项中。把”启用父路径“前面打上勾。确认刷新。

问题2:ASP的Web扩展配置不当(同样适用于ASP.NET、CGI)
症状举例:
HTTP 错误 404 – 文件或目录未找到。
原因分析:
在IIS6.0中新增了web程序扩展这一选项,你可以在其中对ASP、ASP.NET、CGI、IDC等程序进行允许或禁止,默认情况下ASP等程序是禁止的。
解决方法:
在IIS中的Web服务扩展中选中Active Server Pages,点击“允许”。

问题3:身份认证配置不当
症状举例:
HTTP 错误 401.2 – 未经授权:访问由于服务器配置被拒绝。
原因分析:IIS 支持以下几种 Web 身份验证方法:
匿名身份验证
IIS 创建 IUSR_计算机名称 帐户(其中 计算机名称 是正在运行 IIS 的服务器的名称),用来在匿名用户请求 Web 内容时对他们进行身份验证。此帐户授予用户本地登录权限。你可以将匿名用户访问重置为使用任何有效的 Windows 帐户。
基本身份验证
使用基本身份验证可限制对 NTFS 格式 Web 服务器上的文件的访问。使用基本身份验证,用户必须输入凭据,而且访问是基于用户 ID 的。用户 ID 和密码都以明文形式在网络间进行发送。
Windows 集成身份验证
Windows 集成身份验证比基本身份验证安全,而且在用户具有 Windows 域帐户的

内部网环境中能很好地发挥作用。在集成的 Windows 身份验证中,浏览器尝试使用当前用户在域登录过程中使用的凭据,如果尝试失败,就会提示该用户输入用户名和密码。如果你使用集成的 Windows 身份验证,则用户的密码将不传送到服务器。如果该用户作为域用户登录到本地计算机,则他在访问此域中的网络计算机时不必再次进行身份验证。
摘要身份验证
摘要身份验证克服了基本身份验证的许多缺点。在使用摘要身份验证时,密码不是以明文形式发送的。另外,你可以通过代理服务器使用摘要身份验证。摘要身份验证使用一种挑战/响应机制(集成 Windows 身份验证使用的机制),其中的密码是以加密形式发送的。
.NET Passport 身份验证
Microsoft .NET Passport 是一项用户身份验证服务,它允许单一签入安全性,可使用户在访问启用了 .NET Passport 的 Web 站点和服务时更加安全。启用了 .NET Passport 的站点会依* .NET Passport 中央服务器来对用户进行身份验证。但是,该中心服务器不会授权或拒绝特定用户访问各个启用了 .NET Passport 的站点。
解决方法:
根据需要配置不同的身份认证(一般为匿名身份认证,这是大多数站点使用的认证方法)。认证选项在IIS的属性->安全性->身份验证和访问控制下配置。

问题4:IP限制配置不当
症状举例:
HTTP 错误 403.6 – 禁止访问:客户端的 IP 地址被拒绝。
原因分析:
IIS提供了IP限制的机制,你可以通过配置来限制某㊣P不能访问站点,或者限制仅仅只有某些IP可以访问站点,而如果客户端在被你阻止的IP范围内,或者不在你允许的范围内,则会出现错误提示。
解决方法:
进入IIS的属性->安全性->IP地址和域名限制。如果要限制某些IP地址的访问,需要选择授权访问,点添加选择不允许的IP地址。反之则可以只允许某些IP地址的访问。

问题5:IUSR账号被禁用
症状举例:
HTTP 错误 401.1 – 未经授权:访问由于凭据无效被拒绝。
原因分析:
由于用户匿名访问使用的账号是IUSR_机器名,因此如果此账号被禁用,将造成用户无法访问。
解决办法:
控制面板->管理工具->计算机管理->本地用户和组,将IUSR_机器名账号启用。

问题6:NTFS权限设置不当
症状举例:
HTTP 错误 401.3 – 未经授权:访问由于 ACL 对所请求资源的设置被拒绝。
原因分析:
Web客户端的用户隶属于user组,因此,如果该文件的NTFS权限不足(例如没有读权限),则会导致页面无法访问。
解决办法:
进入该文件夹的安全选项卡,配置user的权限,至少要给读权限。关于NTFS权限设置这里不再馈述。

问题7:IWAM账号不同步
症状举例:
HTTP 500 – 内部服务器错误
原因分析:
IWAM账号是安装IIS时系统自动建立的一个内置账号。IWAM账号建立后被Active Directory、IIS metabase数据库和COM+应用程序三方共同使用,账号密码被三方分别保存,并由操作系统负责这三方保存的IWAM密码的同步工作。系统对IWAM 账号的密码同步工作有时会失效,导致IWAM账号所用密码不统一。
解决办法:
如果存在AD,选择开始->程序->管理工具->Active Directory用户和计算机。为IWAM账号设置密码。
运行c:\\\\Inetpub\\\\AdminScripts>adsutil SET w3svc/WAMUserPass +密码 同步IIS metabase数据库密码
运行cscript c:\\\\inetpub\\\\adminscripts\\\\synciwam.vbs -v 同步IWAM账号在COM+应用程序中的密码

问题8:MIME设置问题导致某些类型文件无法下载(以ISO为例)
症状举例:
HTTP 错误 404 – 文件或目录未找到。
原因分析:
IIS6.0取消了对某些MIME类型的支持,例如ISO,致使客户端下载出错。
解决方法:
在IIS中 属性->HTTP头->MIME类型->新建。在随后的对话框中,扩展名填入.ISO,MIME类型是application。

另外,防火墙阻止,ODBC配置错误,Web服务器性能限制,线程限制等因素也是造成IIS服务器无法访问的可能原因,这里就不再一一馈述了。

标签:, , , , ,
20070808 windows vc sdk dialog control - 五月 11, 2008 by yippee

#include <windows.h>

LRESULT WINAPI myProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

&leftsign;

 if(message == WM_CLOSE)

  PostQuitMessage(0);  

 if (message==WM_COMMAND)
 &leftsign;
  if (LOWORD(wParam)==101)
  &leftsign;
   SetDlgItemText(hwnd,101,"123");
  &rightsign;
 &rightsign;

 return 0;

&rightsign;

int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int)

&leftsign;

 MSG msg;

 HWND myDialog = CreateWindowEx(

  0,WC_DIALOG,"My Window",WS_OVERLAPPEDWINDOW &line; WS_VISIBLE,

  400,100,200,200,NULL,NULL,NULL,NULL

 );
      HWND   hbtnWnd1=CreateWindow(
       "button",  //这里设定按钮的类型为button,其它类型有静态控件static,
                  //滚动条控件scrollbar,编辑框控件edit,列表框控件listbox

       "BS_AUTOCHECKBOX",   //这里设定按钮上显示的文本
       WS_CHILD&line;WS_VISIBLE,
                   //按钮风格,其中必须有WS_CHILD风格,因为是子窗口,
          //这里可以设定按钮的风格和窗口的风格参数
       10,       
       40,          //(10,40)为按钮的左上角的坐标
       160,        //按钮的宽度
       30,         //按钮的高度
          myDialog,       //父窗口句柄
       (HMENU)101,        //子窗口ID,即按钮ID
       hInst,   //实例句柄
       NULL);       //额外参数

 SetWindowLong(myDialog, DWL_DLGPROC, (long)myProc);

 

 while(GetMessage(&msg,NULL,0,0))  &leftsign;

  TranslateMessage(&msg);

  DispatchMessage(&msg);

 &rightsign;

 return 0;  

&rightsign;

标签:, , , , ,
20070605 .net 权限 WindowsFormsApplicationBase UnauthorizedAccessException - 十一月 6, 2007 by yippee

20070605 .net 权限 WindowsFormsApplicationBase UnauthorizedAccessException
http://www.yippeesoft.com

http://www.codeproject.com/csharp/CSSIApp.asp
http://blog.csdn.net/freexploit/archive/2006/07/31/1002682.aspx
http://www.microsoft.com/china/technet/itsolutions/net/maintain/netopsgd.asp
http://support.microsoft.com/?scid=kb%3Ben-us%3B832742&x=11&y=14
http://msdn2.microsoft.com/zh-cn/library/yd267cce(VS.80).aspx
http://msdn.microsoft.com/library/en-us/dnbda/html/authaspdotnet.asp
http://msdn2.microsoft.com/zh-cn/library/yctbsyf4(VS.80).aspx
http://msdn2.microsoft.com/en-us/library/ms978378.aspx

一个单进程C#程序,结果通过WEB调用,发现出错
未处理 System.UnauthorizedAccessException
  Message="对路径“db838237-40f4-4cb3-adcb-771441ffbb011.0Event”的访问被拒绝。"
  Source="mscorlib"
  StackTrace:
       在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
       在 System.Threading.EventWaitHandle..ctor(Boolean initialState, EventResetMode mode, String name, Boolean& createdNew, EventWaitHandleSecurity eventSecurity)
       在 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
       在 SingleInstanceApp.Global.Main(String[] args)

代码是基于WindowsFormsApplicationBase

资料:
关于异常的疑难解答:System.UnauthorizedAccessException

当因为 I/O 错误或安全错误造成操作系统拒绝访问时,会引发 UnauthorizedAccessException 异常。

确定信任级别
生成应用程序时,安全是一个重要的考虑因素。公共语言运行库会基于代码具有的特定属性(命名证据)授予代码不同的信任级别。

当公共语言运行库确定代码具有特定信任级别时,公共语言运行库将允许代码访问受该信任级别保护的资源。默认情况下,从 Internet 运行的 .NET Framework 应用程序与从本地计算机运行的 .NET Framework 应用程序具有的信任级别并不相同。从本地计算机运行的应用程序可以访问文件系统之类的资源。然而,从 Internet 或本地 Intranet 运行的应用程序无法访问您本地计算机上的文件系统。

通常,默认安全策略对您的应用程序已经足够了。Microsoft 建议仅在必要时更改此安全策略。可以使用 .NET Framework 配置工具 (Mscorcfg.msc) 更改该安全策略。

在 .NET Framework 中,代码访问安全通过控制代码如何运行来控制对资源的访问。用户运行应用程序时,公共语言运行库会将该应用程序分配给以下五个区域中的任意一个:
• 我的电脑 — 应用程序代码直接由用户的计算机承载。
• 本地 Intranet — 应用程序代码从用户的 Intranet 上的文件共享运行。
• Internet — 应用程序代码从 Internet 运行。
• 受信任的站点 — 应用程序代码从在 Internet Explorer 中定义为“受信任”的网站运行。
• 不受信任的站点 — 应用程序代码从在 Internet Explorer 中定义为“受限制”的网站运行。
可以将每个区域的安全级别设置为“高”、“中”、“中低”或“低”。

信任级别定义应用程序可以访问的资源。区域和其他安全证据(例如,发布者、强名称、网站和代码的 URL)一起确定公共语言运行库在运行时向代码授予的权限。

由于无法控制用户计算机上的安全设置,因此您的应用程序必须在现有设置中工作。所以,有些资源可能对您的应用程序不可用。例如,您的应用程序可能必须向某一文件写入数据。但是,用户的计算机可能在运行时引发异常,来拒绝您的应用程序的写入访问。

回到顶端
向应用程序授予权限
网络驱动器上承载的应用程序可以在本地计算机上运行。要运行该应用程序,必须向与该应用程序对应的程序集授予信任级别。信任级别设置包括从“无”到“完全信任”多个级别。要在本地计算机上运行该应用程序,必须向程序集授予“完全信任”权限。
分配“完全信任”权限
1. 根据您的操作系统,执行以下操作:
• 在 Windows XP 中,单击“开始”,然后单击“控制面板”。
• 在 Windows 2000 中,单击“开始”,指向“设置”,然后单击“控制面板”。
2. 根据所使用的 .NET Framework 版本,执行以下操作:
• 如果使用的是 .NET Framework 1.1,则请双击“管理工具”,然后双击“Microsoft .NET Framework 1.1 向导”。
• 如果使用的是 .NET Framework 1.0,则请双击“管理工具”,然后双击“Microsoft .NET Framework 向导”。
随即显示“.NET 向导”窗口。
3. 在“.NET 向导”窗口中,单击“信任程序集”。随即显示“信任程序集”对话框。
4. 单击以选择“对此计算机进行更改”选项,然后单击“下一步”。
5. 单击“浏览”。随即出现“选择程序集”对话框。
6. 在“选择程序集”对话框中,在映射的网络驱动器上找到相应的可执行文件,然后单击“打开”。
7. 在“信任程序集”对话框中,单击“下一步”。
8. 在“信任程序集”对话框中,将滑块移动到“完全信任”,然后单击“下一步”。
9. 单击“完成”。
10. 要从映射的网络驱动器运行可执行文件,请在 Windows 资源管理器中双击该文件。

问题是我用的是 .NET Framework 2.0 居然找不到 Microsoft .NET Framework 1.1 向导 郁闷

在Microsoft .NET Framework Configuration中可以设置所有关于.NET Framework的属性。
点击我的电脑,打开下拉菜单,我们可以看到程序集缓存、已配置程序集、远程处理服务、运行库安全策略、应用程序等五项。运行库安全策略设置是我们这篇文章的重点。

  我们可以先查看一下程序集缓存,在这里我们可以看到所有的全局程序集缓存,全局程序集缓存中存储了专门指定给由计算机中若干应用程序共享的程序集。在这里我们可以发现我们可以使用的所有的程序集,同时也可以添加和删除某些程序集。详细操作请参见.NET Framework SDK文档。

  我们在这里主要讨论的是运行库安全策略。在此策略中,按层次结构由高到低分为四个级别,即:企业、计算机、用户、应用程序。在计算权限授予时,运行库从该层次结构的顶部开始,然后向下进行计算。较低的策略级别不能对在较高级别上授予的权限进行增加,但是可以使权限减少。这就是说如果我们将计算机策略设置为较小的权限时,可以不必更改企业策略就可以使设置的权限生效,也就是说权限检查的顺序是从低级别到高级别,只有在低级别中不存在的设置才会检查上一级的设置。默认情况下,用户策略和应用程序域策略的限制性小于计算机策略和企业级策略。大部分默认策略存在于计算机级别。所以我们需要将默认安装的主机的权限在计算机级别上进行修改,修改的内容根据主机是不是共享主机,主机应用的其他不明代码的可能性来设置。如果是我们讨论的共享主机的话,在计算机级别上就尽量将权限设的小一些,为了避免我们讨论的文件系统安全问题,一定要注意权限中的本地磁盘访问权限。

问:
在下现在需要往一个共享文件夹中写入信息,但总是有异常,说对那个文件的访问被拒绝。我用绝对路径,但仍然是相同的异常。我查看当前用户是ASPNET。我想是不是用户权限的问题,请各位大虾给诊断一下。能不能告诉我如何在代码中改变当前用户的权限?最好给出代码示例,小可不胜感激!!
______________________________________________________________________________________________
答1:
gz
______________________________________________________________________________________________
答2:
感谢您使用微软产品。

默认情况下,ASP.NET的工作进程的Security Context为aspnet本地用户。

也就是说,当ASP.NET去访问资源的时候,会使用aspnet的access token, 根据我的经验,这个问题很可能是由于aspnet账号不具备在该文件夹读写的权限。

解决这个问题,您可以已采取下面的方法:

1。 改变ASP.NET工作进程的账号,默认情况下,是ASPNET, 具体情况,请您参阅下面的微软知识库文章:

Q317012 INFO: Process and Request Identity in ASP.NET
http://support.microsoft.com/support/kb/articles/q317/0/12.asp

2。 如果您要在代码中impersonate到其他账号,请您参阅下面的微软知识库文章:

Q306158 INFO: Implementing Impersonation in an ASP.NET Application
http://support.microsoft.com/support/kb/articles/q306/1/58.asp

关于IIS和ASP.NET安全性方面的更多信息,请您参阅下面的文章:

http://www.microsoft.com/china/community/article.asp?oBODY=TechZone/TechArticle/TechDoc/NETcertification&oXSLT=TechZone/TechArticle/TechContent

____________________________________________________________________________________________
答3:
谢谢,楼上的。还有个问题,我在代码中impersonate到其他账号,但要提供用户名和密码以及域。因为我的应用是通用的,那么,我应该是用什么账号和密码才行,Windows有没有这样的通用账号,同时又具有很高的权限?
______________________________________________________________________________________________
答4:
没人回答吗?
______________________________________________________________________________________________
答5:
呵呵,把aspnet添加到adminnistrator组中,不太好

或者,修改mechine.config的文件中的<processModel  userName="machine" password="autogenerate" />

把username 改为:SYSTEM

 .net 对文件设置权限的代码
/// <summary>
    /// 给文件夹添加aspnet用户
    /// </summary>
    private void adddirectorysecurity()
    &leftsign;
        directoryinfo dirinfo = new directoryinfo(server.mappath(strdir));

        if ((dirinfo.attributes & fileattributes.readonly) != 0)
        &leftsign;
            dirinfo.attributes = fileattributes.normal;
        &rightsign;

        //取得访问控制列表
        directorysecurity dirsecurity = dirinfo.getaccesscontrol();

        string strdomain = dns.gethostname();

        dirsecurity.addaccessrule(new filesystemaccessrule(strdomain + "\\\\aspnet", filesystemrights.fullcontrol, accesscontroltype.allow));

        dirinfo.setaccesscontrol(dirsecurity);
    &rightsign;

标签:, , , , , , , ,
20070521 Windows Updates Downloader - 十月 23, 2007 by yippee

20070521  Windows Updates Downloader
http://www.yippeesoft.com

Windows Updates Downloader是什么?Windows Updates Downloader是一个下载当前所有Windows和Office、Exchange严重更新的小工具。

软件界面与功能一样非常简单,毕竟只是一个更新查看和下载工具嘛。(未下载安装更新时,界面内容为空。)

 

支持多种语言版本的产品更新,使用前需要从wud.jcarle.com下载相关语言的更新列表文件。从列表可以看出英文版下载两最多,其次就是中文版了。下图所示更新列表目前未包含即将发布的Windows Vista操作系统。

请从上图所示列表选择你需要的产品相应的更新列表,点击下载后让它自动运行即可在主界面中加载该列表。如我选择的是简体中文版的Windows XP和Office 2003的更新列表。

在鼠标移动到更新列表其中一项时会出现该更新的介绍,可以清楚了解该项更新的目的。

 

重要的是,虽然软件是英文的,但是相关的下载内容却是你所选择的语言,非常不错。所有可下载的更新都分类别类以列表形式展现,一目了然。

OK,我们选择几项进行下载试试看。下载链接来自微软,所以下载决定于你与微软下载服务器的连接情况。

 

选项:

 

或许你会问:Windows不是由自动更新吗?下载更新做什么?如果你难得重装系统或恢复系统到的确是没什么用,但是,如果你频繁重装/恢复系统的话用户就大了,收集每次更新就不用每次都下载了,尤其是SP补丁包的尺寸可是很大的。

ULZ文件是个ZIP文件,用ICSharpCode.SharpZipLib.dll解压获得windows-xp-x86-chs.ul
UL是个XML文件
<?xml version="1.0" encoding="gb2312"?>
<updatelist product="Windows XP" platform="x86" language="CHS" lastupdate="2007-02-13" xmlns="http://wud.jcarle.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://wud.jcarle.com http://wud.jcarle.com/wud.xsd">
 <!–Generated file by Rj\’s ulTranslate v1.6, translated from xp-v3.xml (2007-02-13)–>
 <categories>
  <category id="1">Critical Updates</category>
  <category id="2">Service Packs</category>
  <category id="3">Internet Explorer 6.0</category>
  <category id="4">.NET Framework 1.1</category>
  <category id="5">.NET Framework 2.0</category>
  <category id="7">Windows Media Player</category>
  <category id="9">Other</category>
 </categories>
 <updates>
  <update id="KB928090.IE7" category="1" publishdate="2007-02-13" article="http://support.microsoft.com/?kbid=928090">
   <!–http://www.microsoft.com/downloads/details.aspx?familyid=EE851EFD-2CAF-41CE-A423-E1827DE318DF&displaylang=zh-cn–>
   <title>Internet Explorer 7 for Windows XP Service Pack 2 安全更新程序 (KB928090)</title>
   <description>此更新解决了 Microsoft Security Bulletin MS07-016 中讨论的漏洞。要了解为您提供的其他安全更新,请参见本页的概述部分。</description>
   <filename>IE7-KB928090-WindowsXP-x86-chs.exe</filename>
   <url>http://download.microsoft.com/download/7/b/2/7b2c08bd-4b61-4bc4-b54c-50d4df0777d7/IE7-KB928090-WindowsXP-x86-chs.exe</url>
  </update>
  <update id="KB928843" category="1" publishdate="2007-02-12" article="http://support.microsoft.com/?kbid=928843">
   <!–http://www.microsoft.com/downloads/details.aspx?familyid=a3700273-d7da-4a60-ba80-c95c8036d670&displaylang=zh-cn–>
   <title>Windows XP 安全更新程序 (KB928843)</title>
   <description>现已确认有一个安全问题,攻击者可能会利用此问题危及 Windows 系统的安全并获取对该系统的控制权。</description>
   <filename>WindowsXP-KB928843-x86-CHS.exe</filename>
   <url>http://download.microsoft.com/download/9/d/2/9d28befd-6efe-4755-846e-58224d135f79/WindowsXP-KB928843-x86-CHS.exe</url>
  </update>
<?xml version="1.0" encoding="gb2312"?>
<updatelist product="Office 2003" platform="x86" language="CHS" lastupdate="2006-09-02" xmlns="http://wud.jcarle.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://wud.jcarle.com http://wud.jcarle.com/wud.xsd">
 <!–Generated file by Rj\’s ulTranslate v1.3 beta, translated from office-2003-ul.xml (2006-08-19)–>
 <categories>
  <category id="1">安全更新</category>
  <category id="2">Service Packs</category>
  <category id="3">Framework</category>
 </categories>
 <updates>
  <update id="KB921566" category="1" publishdate="2006-08-07">
   <!–http://www.microsoft.com/downloads/details.aspx?familyid=57e27a97-2db6-4654-9db6-ec7d5b4dd867&displaylang=zh-cn–>
   <title>Office 2003 安全更新 (KB921566)</title>
   <description>Microsoft Office 2003 中存在一个安全漏洞,当您打开经过恶意修改的 Microsoft Office PowerPoint 2003 文件时,该漏洞使任意代码都能运行。本更新可以消除该漏洞。</description>
   <filename>office2003-KB921566-FullFile-CHS.exe</filename>
   <url>http://download.microsoft.com/download/e/6/4/e640272c-d740-4528-bd36-e8c487dd80e3/office2003-KB921566-FullFile-CHS.exe</url>
  </update>

标签:, , ,
20070322 nltdm WindowsNtldmServer - 八月 24, 2007 by yippee

20070322 nltdm WindowsNtldmServer
http://www.yippeesoft.com

系统一启动:
COMODO报告:
      高                       应用程序监视器                                       应用程序拒绝访问           ( iexplore  .exe :218 .85.157 .99 : :dns (53) )                            21 :29:58 15 – 01-2007
     详细资料
      应用程序     :  C :\\Program Files    \\Internet Explorer    \\iexplore  .exe
      父程序    : C :\\WINDOWS       \\system   32 \\nltdm  .exe
      协议  :  UDP   出站

      目标  :  218  .85 .157 .99 ::dns  (53 )
 
 mcafee报告
2007-1-15 21:13:46 1095 NT AUTHORITY\\SYSTEM C:\\WINDOWS\\system32\\services.exe \\REGISTRY\\MACHINE\\SYSTEM\\ControlSet001\\Services\\WindowsNtldmServer 通用最大保护:禁止将程序注册为服务 
2007-1-15 21:13:53 1095 NT AUTHORITY\\SYSTEM C:\\WINDOWS\\system32\\services.exe \\REGISTRY\\MACHINE\\SYSTEM\\ControlSet001\\Services\\WindowsNtldmServer\\Security 通用最大保护:禁止将程序注册为服务 

HIJACK检测

O23 – Service: WindowsNtldmServer – Unknown owner – C:\\WINDOWS\\system32\\nltdm.exe (file missing)

用SC DELETE 删除掉
从注册表中删除服务子项。如果服务正在运行或者另一个进程有一个该服务的打开句柄,那么为了删除而标记该服务。

语法
sc [ServerName] delete [ServiceName]

参数
ServerName
指定服务所在的远程服务器名称。该名称必须使用 UNC 格式 ("\\\\myserver")。若要在本机上运行 SC.exe,请忽略此参数。
ServiceName
指定由 getkeyname 操作返回的服务名。
/?
在命令提示符显示帮助。
注释
使用“添加或删除程序”删除 DHCP、DNS 或任何其它内置的操作系统服务。“添加或删除程序”不只删除该服务的注册表子项,而且还卸除该服务并删除其所有的快捷方式。
范例
下面的范例显示了如何使用 sc delete 命令:

sc delete newserv

网上的资料
NTLDM – - 进程信息 – Visit English -
进程文件:  NTLDM 什么是进程?
进程名称:  Troj_backdoor.NTLDM
英文描述:  N/信因息助进逢程债库音息揪processlib.net穴bbs.processlib.net萝www.processlib.netwww.processlib.net藉A
进程分析:  该病毒修改注册表创建系统服务NTFSDriverExtensions实现自启动,运信因息助进逢程债库 藉行后允许恶意攻击者控制计算机。
 
进程位置:  windir\\
程序用途:  后门木马病毒  
作者:  unknown
属于:  unknown  
 
安全等级 (0-5):  0 (N/A无危险 5最危险)
间碟软件:  是
广告软件:  是
病毒:  是
木马:  是
 
系统进程:  否
应用程序:  否
后台程序:  是
使用访问:  是
访问互联网:  否

标签:, ,
20070130 windows linux c 编程 - 七月 3, 2007 by yippee

20070130 windows linux c 编程

msys + MinGW + wxWidgets
1. Download MinGW-5.0.2.exe(129k) from sf/mingw
2. Run MinGW-5.0.2.exe, select module(mingw + gcc)
3. The setup program will download what you want automatically from Internet to the directory where the program located, then install those packages automatically to complete install. The package downloaded is below:
mingw-runtime.3.9.tar.gz
w32api-3.6.tar.gz
binutils-2.15.91-20040904-1.tar.gz
gcc-core-3.4.2-20040916-1.tar.gz
gcc-g++-3.4.2-20040916-1.tar.gz
mingw32-make-3.8.0-3.tar.gz

4. Download msys-1.0.10.exe(2742k) from sf/mingw
5. Run msys-1.0.10.exe, then select y,and specify the direcory of mingw.
6. Modify msys.bat to change some font setting.

7. Download wxWidgets-2.6 from wxWidgets.org
8. Enter msys, then execute below command to get wx inc an lib.
$ ./configure –enable-unicode –disable-shared
$ make
$ make install
9. But the sample program compiled with lib above has to be run with mingw10.dll in mingw/bin. That is because of thread module. Two approaches can be done to erase the dependency.
    First, re-configure the makefile.
        $ ./configure –enable-unicode –disable-shared –disable-threads
    Second, Modifying the makefile file manually
       remove all "-mthreads" in makefile
10. Maybe there is an error about ld for lacking of wx lib path. In makefile make LIBDIRNAME = /usr/local/lib to add lib path
11. If the above description can not make any effort, using below command to re-make wx.
    $ make clean
    $ ./configure –enable-unicode –disable-shared –disable-threads
    $ make
    $ make install

[Windows] windows上搭建linux开发环境(zz)
这里所说的开发环境主要是指在windows上使用GCC(GNU Compiler Collection)进行开发,根据需求的不同,我们有以下几种选择:

1. DevC++

这是一款基于MingW的集成开发环境(IDE),适合于C++初学者,可以利用它编写符合标准C++(98)规范的代码,体验GCC的一些特性。

DevC++非常小巧,由Bloodshed Software开发,属于Free Software。
DevC++的最新版本为:DevC++ 5.0 beta9.2(4.9.9.2) with MingW/GCC 3.4.2
DevC++的官方站点为:http://www.bloodshed.net

2. MinGW

MinGW,即Minimalist GNU for Windows,它是GNU工具集(主要是GCC)在Windows上的一个移植,通过它我们可以使用GCC来开发Win32程序。

MinGW是基于命令行的,对于初学者,使用命令行来开发有助于了解其中的细节。不过,如果你不习惯命令行的话,那么也可以选择IDE。前面提到的 DevC++便是对MinGW的一个GUI包装(界面用Delphi开发,在DevC++的安装目录下便能找到MinGW工具包),另外还有一款名为MinGW Developer Stuidio的IDE,它完全效仿了VC6的界面,对于熟悉VC6的朋友来说应该能够很快上手。

不少跨平台的开源软件在Windows上便是以MinGW为编译工具,比如大名鼎鼎的MPlayer。

MinGW的官方站点为:http://www.mingw.org

3. Cygwin

Cygwin由Cygnus公司开发,与MinGW相比,它是一个庞然大物,因为它企图在Windows上搭建整个Linux平台。Cygwin包含两个部分,首先是cygwin1.dll,它是对Linux API的一个模拟,其次是Linux工具集,包含GCC、vi以及grep等几乎所有常用工具。因此,选择Cygwin,我们不仅能使用GCC,更能学习Linux的命令工具。

Cygwin的官方站点为:http://www.cygwin.com

Cygwin的安装和使用方法为:
1) 到官方站点下载setup.exe程序;
2) 运行setup.exe,根据自己需要,可以选择从网络下载并安装或者只下载不安装。Cygwin的默认安装并不包含GCC工具,因此必须自己设置。在进行到“Select Packages”一步时,展开Devel Category,可以看到gcc package的状态为Skip,单击它,Skip将切换成最新的版本号,表示我们将安装它。如果我们要安装所有package,可以单击Category后面的Default标签,其文字将变成Install。编辑工具vi默认也不会被安装,它位于Editors Category目录下。怎样确定我们要安装的工具位于哪个Category下呢?方法是打开Cygwin下载目录(名称类似于ftp%3a%2f%2fcygwin.osuosl.org%2fpub%2fcygwin)下的setup.ini文件,查找@ tool_name(注意:@后面有一空格),比如gcc应查找@ gcc,在其中的描述信息中便包含了工具所属的Category。Cygwin很庞大,如果全部安装的话,听说需要大概4G的空间。
3) 安装完毕后,桌面上将出现一个快捷方式,运行它即可进入虚拟的linux工作环境。另外,我们也可将cygwin安装目录下的bin文件夹所在路径添加到系统PATH环境变量中,这样就可以直接在控制台中使用cygwin下的命令工具,比如运行g++等。

4) Telnet

通过telnet远程登录linux主机,这不同于前面提到的三种方法,因为它其实是在直接使用linux系统。当项目组有多个成员都需要进行linux 开发的时候,我们便可以搭建一个linux工作站,然后开发成员通过telnet到工作站上进行工作。对于大多数时候使用windows偶尔使用 linux的开发人员来说这是一个不错的选择。telnet工具可以使用STEM或者其它类似工具
 经验交流:怎样在 Windows 上建立与在 Linux 上相同的开发环境    
 

事先声明,这篇 HOWTO 只是出于个人兴趣,如果您觉得无聊,请不要浪费您的时间跟帖,谢谢。

目前,由于工作原因,我只能在 Windows 上做程序开发。离开了我所熟悉的 Linux 开发环境,以前做 Linux 程序员时的良好感觉荡然无存。比如我一见到命令行就想敲 ls / ps / find,遇到一个长文件名就想图省事敲 tab 。Windows 的命令行是如此的笨拙,经常让我感到不适。为了保持一个 Linux 的程序员的良好感觉,我在 Windows 上搭建了一个与 Linux 上几乎完全一样的开发环境。

其实做这件事不止有一种方法。最简单的方法是下载并安装 Cygwin。Cygwin 是 GNU 开发工具的 Windows 版。其中包括我们所熟悉的几乎所有 Linux 上的开发和实用工具,例如 gcc,g++,perl,tcl,autoconf,automake,cvs,awk,sed,etc. 甚至连 rpm 都可以在 Cygwin 中使用。安装好 Cygwin 后在桌面上点击其图标就可以进入 Cygwin 的开发环境 — bash。在 Cygwin 的 bash 中我甚至感觉不到自己是在 Windows 上工作。我是在 Windows 上吗?我是在某种 UNIX 上吧。呵呵。:)
Cygwin 可以从这里下载:http://www.cygwin.com

还有一种方法是自己组合出一套 Linux 开发环境,这也是我所采用的方法。
首先我需要一个 GNU 的编译器 — gcc 。目前 Windows 上有 gcc 的很多移植版本,其中限制最少的是 Mingw。Mingw 可以编译真正 native 的 Win32 代码,而且 Mingw 编译出的代码与 VC++ 也最为接近。 Mingw 可以从这里下载:http://www.mingw.org
然后我需要一个功能比较全的 bash,我使用的是另一个 GNU开发工具的 DOS / Windows版 — DJGPP 中移植的 bash。DJGPP 中的开发工具可以从这里下载:ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/
同样,DJGPP 中也提供了我们在 Linux 上常用的几乎所有的开发和实用工具。

我还需要一个我在 Linux 上常用的编辑器,比如 vim 或者 emacs。没有问题,vim 的 Windows版 可以从这里下载:http://www.vim.org 。emacs 的 DOS/Windows 版 DJGPP 里就有。
我还需要一些常用的工具,比如 gzip,tar,bzip2,awk,sed,m4,etc. 也没有问题,这些工具 DJGPP 里也有。可是我想用真正的 32 位软件,于是我选择了这些工具的 Mingw 版,可以从这里下载:http://www.mingw.org/ported.shtml

我还想在 Windows 上使用 GTK 开发 GUI 应用程序。同样没有问题,GTK 早就被移植到了 Windows 上,使用的就是 Mingw。GTK for Win32 可以从这里下载:http://www.gimp.org/~tml/gimp/win32//downloads.html

我想有时候我可能会需要用到 Posix 系统调用,尤其是在我移植 Linux 软件到 Windows 上时。做这件事有两种方法,第一种是直接使用 Cygwin 做移植。Cygwin 中有完整的 Posix 系统调用。(使用一个模拟 Posix 调用的 dll ) 但是 Cygwin 的 License 是 GPL,使用 Cygwin 做的所有开发代码必须公开。还有一种方法是使用另外一个基于 DJGPP 的 Posix 模拟库来实现 Posix 系统调用。这个库叫做 PW32 (Posix on Win32),可以从这里下载:http://pw32.sourceforge.net/
除了 PW32 本身外,其作者还移植了很多有用的开发工具,其中包括 bash (又一个bash!),m4,perl,autoconf,automake,awk,sed,etc.。

OK,通过组合 Mingw,DJGPP 和 PW32 中的各种开发工具,我得到了与 Cygwin 差不多相同的开发环境。现在我可以很快乐地使用 GNU 开发工具随心所欲地开发我想开发的任何软件了。

希望这篇文章给大家的周末带来一些乐趣。 如果您对在 Windows 上使用 GNU 开发工具感兴趣,欢迎与我交流。我的邮箱是:
unruly_wind@sina.com

–dlee
(setq what \’Linux)
(message "% make the world better!" what)
 
cygwin/gcc和MinGW都是gcc在windows下的编译环境,但是它们有什么区别,在实际工作中如何选择这两种编译器。
 cygwin/gcc完全可以和在linux下的gcc化做等号,这个可以从boost库的划分中可以看出来端倪,cygwin下的gcc和linux下的gcc完全使用的是相同的Toolsets。
所以完全可以和linux一起同步更新gcc版本,而不用担心问题,并且在cygwin/gcc做的东西(不用win32的)可以无缝的用在linux下,没有任何问题。是在windows下开发linux程序的一个很好的选择。但是在cygwin/gcc下编译出来的程序,在windows执行必须依赖cygwin1.dll,并且速度有些慢,如果不想依赖这个东西的化,必须在gcc的编译选项中加入-mno-cygwin。加入这个选项其实gcc编译器就会自动的选择在安装cygwin/gcc时安上的mingw,这个mingw就是gcc的一个交叉编译。
 对于mingw作为gcc在windows上的一个实现,由于不像cygwin的gcc在一个模拟linux上运行,同时相当一部分linux的工具不能够使用,不过现在已经有Msys这个模拟unix的shell,可以解决很多的问题,不过没有cygwin好用,而cygwin/gcc的no-cygwin选项又依赖于mingw的支持,所以更新的更慢的,现在只是到3.3.3。在mingw下也是可以升级gcc的,不过需要使用msys。升级方法和在cygwin和linux下差不多,就不再罗嗦了。不过就我的升级经验来看好像都不太顺利。具体深入的测试,我也没有时间做了。
 也是可以让cygwin的最新安装的gcc支持no-cygwin,需要再做一遍交叉编译,但是我不会做,只好算了,呵呵,也许那一天我把这个搞定,再开一个贴吧。
 根据以上的分析,如果在windows开发linux程序,cygwin是很好的选择。如果你开发的程序不介意有一个cygwin1.dll的话,也是可以选择cygwin的。如果你是想开发windows下的程序,还要必须用gcc的化,mingw是很好的一个选择。但是在windows下有太多的编译器了,bc,vc,intel c…..。
 顺便说就题外的化,据说gcc4.0.0性能有很大的提升,如果我升级完gcc4后,再编译一把gcc4是不是以后的编译性能会提高很多呢?有机会一定要测试一下了,呵呵。
 
 一个技巧:如何知道当前版本的gcc的安装配置,用命令:gcc -v就可以了,呵呵。
win32下GNU 编译环境搭建
2005年08月09日 00:00:28

eclipse和dev-cpp这些都是调用MinGW或者Cygin来编译调试C/C++程序的. 建议使用MinGW,它全称是Minimal GNU for Win,是GNU开发工具在win32平台上的一个移植,不同于Cygin,MinGW是原生的win32移植,不需要另外的POSIX模拟中间层的支持.另外MinGW项目也发布了一个最小的posix实现接口–msys,移植了很多linux下很方便的小工具,比如ls,vi,rvxt等等. MinGW项目的主页是
    http://www.mingw.org
我们可以在上面下载最新的  MinGW-3.2.0-rc-3.exe 和 MSYS-1.0.10.exe 这两个文件,安装的时候先安装Mingw,然后安装msys.安装完msys之后会跳出一个问题,选y (yes), 然后它问你是不是已经安装了 MinGW, 选y,然后按它的例子输入MinGW的安装路径(比如c:/MinGW),这样msys就把这个路径mount到了安装路径的msys目录下,可以直接使用Mingw的那些工具了.

   好了.装好这两个以后我们就要eclipse编译c文件需要的gcc,gdb,make工具了.为了eclipse能找到它们,要把c:\\MinGW\\ bin目录加到windows的环境变量PATH中. 需要说明的是,c:\\MinGW\\bin目录下的make不是GNU的make,而是mingw32-make.exe,这个是make在windows 下的版本,由于没有posix完整接口,这个make缺少一些标准make的功能,同时也有一些linux下make所不具备的功能. 因为我们后面要用到pkg-config来自动配置GTK+库的路径,这是mingw32-make.exe所不支持的. msys中提供的GNU make是可以的,为了使用它,我们还得把msys安装目录下的bin目录加到环境变量PATH中.
Eclipse+CDT MSYS/MinGW开发GTK+2/Glade跨平台GUI开发环境构建
先声明,不管使用什么高级货IDE,统统都是对make、gcc/g++、GBD的包装,所以,无论用什么IDE,只要在cmd下面跑通了就肯定都没有问题!我习惯eclipse,就用这个做例子了。

一、准备工作:

  就是下载必备软件:
  #Eclipse&CDT:
   http://www.eclipse.org
  #MinGW环境:
   http://www.mingw.org/
   1、MinGW-3.2.0-rc-3.exe
   2、MSYS-1.0.10.exe
   3、msysDTK-1.0.1.exe
   4、msys-libtool-1.5.tar.bz2
  #GTK+ and GTKMM win32 port库:
   1、GTK+/Glade: http://gladewin32.sourceforge.net/
   2、GTKMM: http://www.pcpm.ucl.ac.be/~gustin/win32_ports/gtkmm.html
  
  解释一下上面都是什么东西:
  Eclipse是很好的集成开发环境,广泛应用在j2ee开发上,CDT是一套基于Eclipse平台的C/C++开发插件,功能强大,包括了代码辅助和调试,都很方便。
  MinGW-3.2.0-rc-3.exe和MSYS-1.0.10.exe再啰嗦一下,就是M$ Windows下开发跨平台C/C++的环境,什么cross compiler(gcc/g++之类)、debug(gdb)之类的还有一些标准库,其实在cmd下面一样用,只要装了msys就行,记得运行脚本文件要这样:sh configure;msysDTK-1.0.1.exe和msys-libtool-1.5.tar.bz2都是configure和make时需要的东西,一定要装;GTK+/Glade里面有已经port好了的安装文件,安装后里面除了有GTK的东西外还有glade;GTK是用纯c写的,安装GTKMM的C++封装后,就可以用C++做GTK了,同时,glade–.exe这个win32 port的用来生成glade c++文件的代码生成器也会一同安装。好了,需要详细了解的请看相关软件的linux版的官网,同时,如果不满意或不放心别人port的东西,完全可以在安装了mingw msys后自己来痛苦的port一把,反正我懒得要命。

  接下来要安装这些软件,别怕都是双击安装和解压缩,没啥技术含量。

  1、MinGW-3.2.0-rc-3.exe

  2、MSYS-1.0.10.exe

下面的窗口中全部按回车跳过msys和mingw的自动整合:

  3、msysDTK-1.0.1.exe & msys-libtool-1.5.tar.bz2

msysDTK-1.0.1.exe:

msys-libtool-1.5.tar.bz2解压缩后,copy其中全部的目录到c:\\msys\\1.0\\下面。

  4、GTK+/Glade和GTKMM

不要自动msys整合:

GTK和GTKMM必需都要安装到mingw的路径下:

  5、环境变量设置

添加PATH环境变量:

  在系统环境变量中设置/添加path变量为:c:\\MinGW\\bin;c:\\msys\\1.0\\bin

  6、复制C:\\MinGW\\share\\下全部目录到C:\\msys\\1.0\\share\\下面,这步很关键!不要遗漏!

  7、在cmd下输入 pkg-config –cflags gtkmm-2.4 和 pkg-config –libs gtkmm-2.4 ,如果出现了类似下面的内容就说明你的基本环境应该没什么问题了。

  完成了,你可以玩玩glade了,glade的图标就在你的桌子上面等着呢。

标签:, , ,
20070129 windows gtk install - 七月 2, 2007 by yippee

20070129 windows gtk install

http://www.yippeesoft.com/
gtk+ -> 2.10.6
glib -> 2.12.4
atk -> 2.12.3
pango -> 1.14.7
cairo -> 1.2.6
libxml -> 2.6.27
librsvg -> 2.4.14 (new)
libcroco -> 0.6.1 (new)

Download here:

Gtk+/Win32 Development Environment (runtime, devel, docs, glade, etc.) Installer 2.10.6-1 (.exe, 11.41M)
Gtk+/Win32 Runtime Environment Installer 2.10.6-1 (.exe, 5.88M)

gtk开发包在windows下的安装可不是一般的麻烦,用这个就好多了.
这实际上是glade项目打包好的文件,可是自动配置vc6和devc++的环境,实在是不错!


[url]http://prdownloads.sourceforge.net/gladewin32[/url]
下载 gtk-win32-devel-2.8.10-rc1.exe [文件名不一定是这样]即可
windows平台gtk程序设计
 
 
 
以MinGW为例
 
1. 从http://www.gimp.org/~tml/gimp/win32/downloads.html下载以下文件:
 
glib-2.12.1.zip. Runtime for GLib 2.12.1. Requires libiconv and gettext.

glib-dev-2.12.1.zip. Corresponding developer package, i.e. headers, import libraries and documentation.

gtk+-2.8.20.zip. Runtime for GTK+ 2.8.20. Requires GLib 2.12, atk 1.10, Pango 1.12 and cairo 1.2. In addition, if you want to be able to load PNG, JPEG or TIFF images with gdk-pixbuf, you will need libpng and zlib, libjpeg and libtiff respectively.

gtk+-dev-2.8.20.zip. Corresponding developer package.

pango-1.12.3.zip. Pango 1.12.3. Pango is used by GTK+ 2 and GIMP 2. Requires GLib 2.12 and cairo 1.2.

pango-dev-1.12.3.zip. Corresponding developer package.

atk-1.10.3.zip. Atk is used by GTK+ 2.

atk-dev-1.10.3.zip. Corresponding developer package.

cairo-1.2.2.zip. Cairo is used by GTK+ 2 and Pango.

cairo-dev-1.2.2.zip. Corresponding developer package.

 

pkg-config-0.20.zip. Pkg-config is a neat program that is useful in makefiles etc and extensively used in building software according to the GTK+ and GNOME conventions, using autotools etc. It uses a "database" specifying interdependencies among softawre packages. It is used to get the compile and link flags needed when building software using libraries that provide pkg-config data. Requires GLib 2.x.

GNU libiconv for Win32. Both runtime and developer files. GNU Libiconv is an implementation of iconv. GLib uses libiconv, so you will need this.

gettext-0.14.5.zip. Just the GNU libintl (internationalization library) DLL (intl.dll). GLib uses libintl, so you will need this.

gettext-dev-0.14.5.zip. GNU gettext deveoper files and tools for Win32, containing the header libintl.h, msgfmt.exe, other programs, documentation, and various other files. libintl.h is needed if you build software that uses GNU gettext for internationalization. Msgfmt is needed if you want to recompile message catalogs. The other commands can be used to manipulate message catalogs in other ways.

解压到一个目录下(以c:\\gtk为例)。
 
2. 从http://gnuwin32.sourceforge.net/packages/libpng.htm下载libpng,安装至c:\\gtk下。
 
3. 编译:
(1) 设置环境变量 set PKG_CONFIG_PATH=C:\\gtk\\lib\\pkgconfig
(2) 运行 pkg-config –cflags  –libs gtk+-win32-2.0
(3)  编译时加上上面的输出作为参数
  http://blog.chinaunix.net/u/8780/showart.php?id=180307

  在windows上安装GTK运行/开发环境(发表时间:2005-11-23)
    其实是件很简单的事情。这里说的是一整套环境,包括gtk的运行环境和开发环境,gtkmm的运行和开发环境,和pygtk。
    如果要做c语言的开发,装 gtk的开发环境就行;要是用C++,就要装gtkmm的开发环境;要是只用python,装pygtk就行了,当然要先装一个python for windows。
    还有,做gtk的界面开发,glade当然是必不可少了。
    gtk和glade的windows版本从这里可以下载。gtkmm和pygtk的window版本可以从这里 下载。对了,gtkmm的安装程序会自动检查机上是否装有gtk,如果没有它会自动下载,如果网络环境好,这倒也很省事。
gtk的这一套开发环境应该是可以配合msvc工作的,不过我一向是用gcc的windows版本mingw,从这里可以下载:www.mingw.org

Tips   for   MSCV   Users  
  Contributed   by   Bill   Nalen    
   
  Download   and   install   the   developer   package   as   above.   I   will   use   c:\\gtk2dev\\   as   the   install   point,   substitute   your   directory   as   needed.    
   
  Compile   Options:  
  I   prefer   to   use   the   additional   include   path   in   the   preprocessor   section   of   the   C/C++   tab.   The   Additional   Include   Directories   box   should   include   the   following:    
   
  C:\\GTK2DEV\\INCLUDE\\GTK-2.0,C:\\GTK2DEV\\LIB\\GTK-2.0\\INCLUDE,C:   \\GTK2DEV\\INCLUDE\\GLIB-2.0,C:\\GTK2DEV\\LIB\\GLIB-2.0\\INCLUDE,C:   \\GTK2DEV\\INCLUDE\\PANGO-1.0,C:\\GTK2DEV\\INCLUDE\\ATK-1.0,c:\\gtk2dev\\include    
   
  The   Code   Generation   item   should   use   the   multi-threaded   dll   (debug   or   normal)   in   the   run-time   library   drop   down.    
   
  Link   Options:  
  On   the   Link   tab   on   the   Input   drop   down   page,   we   need   to   fill   in   the   Object/Library   modules   and   add   the   path   to   the   Additional   Library   Path.   Add   the   following   to   the   Object/Library   Modules   line:    
   
  glib-2.0.lib   gtk-win32-2.0.lib   gdk-win32-2.0.lib   gobject-2.0.lib   gdk_pixbuf-2.0.lib   gthread-2.0.lib   gmodule-2.0.lib   pango-1.0.lib    
   
  You   may   also   need   intl.lib   on   this   line.    
   
  The   Additional   Library   Path   statement   just   needs:    
   
  C:\\GTK2DEV\\LIB    
   
  I   may   have   missed   some   libraries   that   you   may   need   to   compile   but   you   should   be   able   to   add   those   easily.   You   could   also   add   the   paths   above   to   the   libraries   and   include   items   under   Tools   -   Options   -   Directories.    
下载dev-cpp,   runtime   lib,   development   lib,然后按照要求配置一下就可以了。  
   
  GTK+在windows上运行需要一些runtime库,下载这个运行时库,安装执行,在path中加入这个运行时库的lib路径。查看源代码需要dev-cpp,下载。要进行编译还需要安装GTK+的develop库,下载,安装之后还要进行一些设置。在dev-cpp的include路径中包括所有的include目录的的子目录,以及lib目录。在编译选项中添加-mms-bitfields,在工程属性中链接器的参数中添加-lgtk-win32-2.0   -lgdk-win32-2.0   -latk-1.0   -lgdk_pixbuf-2.0   -lpangowin32-1.0   -lgdi32   -lpango-1.0   -lgobject-2.0   -lgmodule-2.0   -lglib-2.0   -lintl   -liconv。
 

标签:, , ,
0906 smb windows 文件共享 - 二月 15, 2007 by yippee

0906 smb windows 文件共享

奇怪的问题:一台机器不能访问服务器,但可以访问别的机器,可以PING通服务器。

最好他自己解决了。稍微说了一下
1、用的所谓网上流传的版本,结果取消了SMB服务
2、服务器关闭了139端口
3、通过抓包,本来应该先往服务器发送两个数据包,但是他的机器只发了一个。

记录一下资料:
–[ 2 - 什么是SMB/CIFS ?

依照微软的意思,CIFS是为客户系统在网络上向服务器请求文件和打印服务的开放跨平台的运行
机制。它是建立在广泛应用于个人电脑和工作站等操作系统的标准服务器消息块(SMB)协议。

实际上,SMB是一个通过网络在共享文件,设备,命名管道和邮槽之间操作数据的协议。CIFS是
SMB的一个公共版本。

SMB客户端的可用系统:

for Microsoft :
Windows 95, Windows for workgroups 3.x, Windows NT,2000 and XP

for Linux :
Smblient from Samba, Smbfs for Linux

修改Windows SMB相关服务的默认端口
Windows NT系列操作系统的NetBT(NetBios Over Tcpip)服务,是用来处理SMB
(Server Message Block)相关的服务/客户操作的。

    NetBT服务对应的驱动程序文件是netbt.sys,对应的注册表项是:
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\NetBT。
微软的KB 120642和KB 314053分别描述了Windows NT、Windows 2000、Windows XP上
该键值的部分可选参数。

    NetBT服务对应的在Windows NT 4.0上对应的端口是:

        NameservicePort    137/UDP
        DatagramPort       138/UDP
        SessionPort        139/TCP

    从Windows 2000开始,微软引入了SMB Direct Over TCP的445端口。上述的137、
138、139 端口虽然被保留,并可正常工作,但是默认情况下,系统总是会使用445端
口进行SMB会话,仅在445端口工作失败的情形下,才会使用139端口作为SessionPort。
445端口默认情况下是始终开放的。如果要关闭该端口,可以参考微软KB 301673中的
方法,在
HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\NetBT\\Parameters
中增加一个值:

        Value Name: SmbDeviceEnabled
        Type: REG_DWORD
        Value Data: 0

然后重新启动系统。

    顺便提一下,如果要关闭139端口,可以参考微软的KB 299977:

1、 单击开始,指向设置,然后单击网络和拨号连接。
2、 单击您希望静态配置的本地连接,单击文件菜单中的属性。
3、 单击 Internet 协议 (TCP/IP),单击属性,单击高级,然后单击 WINS 选项卡。
4、 单击禁用 TCP/IP 上的 NetBIOS。
5、 单击确定,单击确定,再次单击确定。

修改会立即生效,不必重新启动系统。

Windows XP 的 TCP/IP 和 NBT 配置参数
本文详细说明了用于配置协议驱动程序 Tcpip.sys(它实现标准的 TCP/IP 网络协议)的所有注册表参数。

Windows XP 的 TCP/IP 协议套件实现可从注册表中读取它的所有配置数据。在安装过程中,这些信息是由“控制面板”中的“网络”工具写入注册表的。如果已启用动态主机配置协议 (DHCP) 客户服务,则 DHCP 客户服务也会提供这些信息中的部分内容。

在大多数环境中,仅使用由 DHCP 和“控制面板”中的“网络”工具收集的配置信息,就应该可以正确而高效地进行协议套件实现。这些协议的所有其他可配置方面的最佳默认值均已编码到驱动程序中。

客户安装中可能会有一些异常的情况,这时可更改某些默认值。为处理这些情况,可以创建可选的注册表参数,以修改协议驱动程序中某些部分的默认行为。 小心:Windows XP TCP/IP 实现在很大程度上是自优化的。如果未经仔细研究就调整注册表参数,可能会对系统性能造成不利影响。

如何解决NETBT错误
近期公司的一台双网卡服务器频繁出现NETBT错误,提示在TCP网络中有重名,可是我在局域网中找了个遍也没有找到重名的,请大家帮我解决下,谢谢
办法已经找到,两个网卡其中一个网卡连接属性高级wins中的netbios禁掉,另一个网卡的netbios允许即可。

怎么能在注册表关闭445端口?
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\NetBT\\Parameters

TransportBindName REG_SZ \\Device\\

删除缺省的"\\Device\\",留一个空值。重启后"netstat -na"将看不到445/TCP口。但
同时客户端SMB机制支持一并被取消。

A: Jean-Baptiste Marchand <Jean-Baptiste.Marchand@hsc.fr> 2002-02-09

至少有两种办法可以关闭445/TCP:

. 禁用NetBT驱动

第一种方法彻底禁用了系统中的SMB机制,客户端、服务端支持均被取消。为了停止
NetBT驱动,必须先停止工作站、服务器服务,如果不这样做而试图直接停止NetBT驱
动,系统将出故障。

> net stop rdr
> net stop srv
> net stop netbt

rdr、srv不是服务名称,也不是显示名称,而是net命令自己支持的,在此分别等价
于lanmanworkstation、lanmanserver。445/TCP将被热关闭。

"NetBios over Tcpip"驱动可以手工停止,但不能手工启动,只能重启才可恢复。为
了阻止NetBT驱动在重启OS时自动加载,必须将启动类型由缺省的1改成4:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\NetBT]
"Start"=dword:00000004

> sc config netbt start= disabled

. 修改注册表

更多时候第一种方法不是我们所期望的,客户端SMB机制的支持还是需要的。通过修
改注册表可以实现禁用由TCP层直接承载的SMB协议,但继续启用NetBT。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\NetBT\\Parameters]
"SmbDeviceEnabled"=dword:00000000

重启OS使之生效,445/TCP不再侦听中。

A:

devmgmt.msc->查看->显示隐藏设备->非即插即用驱动程序->NetBios over Tcpip->右键停用->重启OS使之生效

这将彻底禁用系统中的SMB机制,客户端、服务端支持均被取消。

标签:, , ,
0820  VB FINDWINDOW EnumWindowsProc - 一月 29, 2007 by yippee

0820  VB FINDWINDOW EnumWindowsProc

如何获得用shell打开的程序窗口的句柄?
Dim   myExe   As   Long  
  myExe   =   Shell(File1.Path   &   "\\"   &   File1.FileName,   vbNormalFocus)  
  以上语句打开一个程序窗口,如何获得打开的窗口句柄?FindWindow   函数怎么用?  
\’FindWindow函数申明  
  Private   Declare   Function   FindWindow   Lib   "user32"   Alias   "FindWindowA"   (ByVal   lpClassName   As   String,   ByVal   lpWindowName   As   String)   As   Long  
  \’FindWindow使用方法  
  hwnd   =   FindWindow(vbNullString,   "窗口Title")  
\’申明FindWindow函数  
  Private   Declare   Function   FindWindow   Lib   "user32.dll"   Alias   "FindWindowA"   (ByVal   lpClassName   As   String,   ByVal   lpWindowName   As   String)   As   Long  
      \’打开“记事本文档”  
  Shell   "C:\\WINDOWS\\system32\\notepad.exe",vbNormalFocus  
      获得打开的记事本窗体的句柄  
      Dim   h1   As   Long  
      h1   =   FindWindow(vbNullString,   "无标题   -   记事本")               \’记事本的句柄  

定时调用EnumWindow 函数,得到所有窗体的名称,如果窗体中含有设定的字符,就向该窗口发送结束消息。

Private Sub Form_Load()
    Me.AutoRedraw = True
    EnumWindows AddressOf EnumWindowsProc, ByVal 0&
End Sub
\’Add this code to a module
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
    Dim sSave As String, Ret As Long
    Ret = GetWindowTextLength(hwnd)
    sSave = Space(Ret)
    GetWindowText hwnd, sSave, Ret + 1
    Form1.Print Str$(hwnd) + " " + sSave
    \’continue enumeration
    EnumWindowsProc = True
End Function

AddressOf 运算符 编译错误:AddressOf操作符使用无效 该函数最好是被定义在Modual中,这样在调用时才是正确的.
一个一元运算符,它将其后面的过程的地址传递给一个 API 过程,该 API 过程在参数表对应位置中需要一个函数指针。
语法
AddressOf procedurename
必需的 procedurename 指定要传递的地址是哪一个过程的地址。这个过程必须是发出调用命令的工程中的一个标准模块模块里的一个过程。
说明
当一个过程的名称出现在一个参数列表中时,通常该过程已经被计算,并且该过程返回值的地址也会被传递。AddressOf 允许该过程的地址被传递给动态链接库 (DLL) 中的一个 Windows API 函数,而不是传递该过程的返回值。API 函数然后就可以使用这个地址来调用相应的 Basic 过程,这个过程就是我们所知道的回调。AddressOf 运算符只出现在对 API 过程的调用中。
尽管可以使用 AddressOf 运算符在 Basic 过程之间传递过程指针,却不能通过这样的一个指针从 Basic 内部调用一个函数。这就是说,例如,一个使用 Basic 编写的类 不能使用这样的一个指针来回调自己的控制器。当使用 AddressOf 运算符在 Basic 内的过程之间传递一个过程的指针时,被调用过程的参数类型必须定义为 As Long。
警告 如果不能完全理解函数回调的概念,则使用 AddressOf 运算符可能会导致意想不到的结果。必须理解回调的 Basic 部份是如何工作的,以及接受所传递的函数地址的 DLL 的代码是如何工作的。调试这样的交互操作是非常困难的,因为该程序和开发环境运行在相同的进程中。在某些情况下,系统的调试也许是不可能的。
注意 可以使用 Microsoft Visual C++ (或者类似的工具)编译的 DLLs 来创建自己的回调函数原型。要使用 AddressOf 运算符来工作,您的原型必需使用 __stdcall 调用约定。缺省的调用约定 (__cdecl) 不能与 AddressOf 运算符一起工作。
因为一个回调的调用程序不在用户自己的程序中,所以很重要的一点是要保证回调过程中的错误不被回传到调用者。可以通过把 On Error Resume Next 语句放置于回调过程的起始处来达到这个要求。

怎么才能使主界面一启动就隐藏窗口
 对话框
  可以在对话框中重载虚函数DefWindowProc()。
    LRESULT CMyDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
    &leftsign;
         if(message==133 )
         ShowWindow(SW_HIDE);
         return CDialog::DefWindowProc(message, wParam, lParam);
    &rightsign;
框架
  BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
&leftsign;
        cs.style = WS_POPUP; //使主窗口不可见
    cs.dwExStyle &line;=WS_EX_TOOLWINDOW; //不显示任务按钮
 if( !CFrameWnd::PreCreateWindow(cs) )
  return FALSE;
    return TRUE;
&rightsign;

对话框隐藏的几种方法-界面类编程-VC
如何让基于对话框的程序运行时隐藏界面vc++技术

标签:, , ,