I forgot to provide my code in the last post, Here is the code<br><br>--wpcap.c--<br><br>pcap_dumper_t* CDECL wine_pcap_dump_open(pcap_t *p, const char *fname)<br>{<br>    UNICODE_STRING nt_name, dospathW;<br>    ANSI_STRING fname_dos;<br>    ANSI_STRING fname_unix;<br>    NTSTATUS res;<br>    RtlInitAnsiString(&fname_dos, fname);<br>    res = RtlAnsiStringToUnicodeString(&dospathW, &fname_dos, TRUE);<br>    printf("RtlAnsiStringToUnicodeString retval = %X\n", res);<br>    if(res == STATUS_INVALID_PARAMETER_2)<br>    {<br>        SetLastError(ERROR_FILENAME_EXCED_RANGE);<br>        return NULL;<br>    }<br>    if(!RtlDosPathNameToNtPathName_U(dospathW.Buffer, &nt_name, NULL, NULL))<br>    {<br>        printf("RtlDosPathNameToNtPathName_U retval = %X\n", res);<br>        RtlFreeUnicodeString(&dospathW);<br>        SetLastError(ERROR_FILENAME_EXCED_RANGE);<br>        return NULL;<br>    }<br>    res  = wine_nt_to_unix_file_name(&nt_name, &fname_unix, FILE_OPEN_IF, FALSE);<br>    printf("VOID_DEBUG: Nt FileName is %s\n", wine_dbgstr_w(nt_name.Buffer));<br>    printf("wine_nt_to_unix_file_name retval = %X\n", res);<br>    if(res == STATUS_NO_SUCH_FILE)<br>    {<br>        SetLastError(ERROR_SUCCESS);<br>    }<br>    else if(res == STATUS_OBJECT_NAME_INVALID)<br>    {<br>        RtlFreeUnicodeString(&dospathW);<br>        SetLastError(ERROR_INVALID_NAME);<br>        return NULL;<br>    }<br>    else if(res == STATUS_OBJECT_NAME_NOT_FOUND || res == STATUS_OBJECT_PATH_NOT_FOUND)<br>    {<br>        RtlFreeUnicodeString(&dospathW);<br>        SetLastError(ERROR_PATH_NOT_FOUND);<br>        return NULL;<br>    }<br>    else<br>    {<br>        SetLastError(ERROR_FILE_EXISTS);<br>    }<br>    RtlFreeUnicodeString(&nt_name);<br>    RtlFreeUnicodeString(&dospathW);<br>    return pcap_dump_open(p, fname_unix.Buffer);<br>}<br><br><br>--wpcap.c--<br><br>--test.c--<br>//#define HAVE_REMOTE<br>#include <pcap.h><br>#include <string.h><br>#define PCAP_SRC_IF_STRING "rpcap://"<br>#define PCAP_OPENFLAG_PROMISCUOUS 1<br>/* 回调函数原型 */<br>void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);<br>void packet_handler_1(u_char *dumpfile, const struct pcap_pkthdr *header, const u_char *pkt_data);<br><br><br>int main(int argc, char **argv)<br>{<br>    pcap_if_t *alldevs;<br>    pcap_if_t *d;<br>    int inum;<br>    int i=0;<br>    pcap_t *adhandle;<br>    char errbuf[PCAP_ERRBUF_SIZE];<br>    pcap_dumper_t *dumpfile;<br><br><br><br>    /* 检查程序输入参数 */<br>    if(argc != 2)<br>    {<br>        printf("usage: %s filename", argv[0]);<br>        return -1;<br>    }<br><br>    /* 获取本机设备列表 */<br>    if (pcap_findalldevs(&alldevs, errbuf) == -1)<br>    {<br>        fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);<br>        exit(1);<br>    }<br><br>    /* 打印列表 */<br>    for(d=alldevs; d; d=d->next)<br>    {<br>        printf("%d. %s", ++i, d->name);<br>        if (d->description)<br>            printf(" (%s)\n", d->description);<br>        else<br>            printf(" (No description available)\n");<br>    }<br><br>    if(i==0)<br>    {<br>        printf("\nNo interfaces found! Make sure WinPcap is installed.\n");<br>        return -1;<br>    }<br><br>    printf("Enter the interface number (1-%d):",i);<br>    scanf("%d", &inum);<br><br>    if(inum < 1 || inum > i)<br>    {<br>        printf("\nInterface number out of range.\n");<br>        /* 释放列表 */<br>        pcap_freealldevs(alldevs);<br>        return -1;<br>    }<br><br>    /* 跳转到选中的适配器 */<br>    for(d=alldevs, i=0; i< inum-1 ; d=d->next, i++);<br><br><br>    /* 打开适配器 */<br>    if ( (adhandle= pcap_open_live(d->name,          // 设备名<br>                              65536,            // 要捕捉的数据包的部分<br>                              // 65535保证能捕获到不同数据链路层上的每个数据包的全部内容<br>                              1,    // 混杂模式<br>                              1000,             // 读取超时时间<br>                              errbuf            // 错误缓冲池<br>                             ) ) == NULL)<br>    {<br>        fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name);<br>        /* 释放设备列表 */<br>        pcap_freealldevs(alldevs);<br>        return -1;<br>    }<br><br>    /* 打开堆文件 */<br>    //Change the last byte to a not NULL character<br><br>    char* str = argv[1];<br>    char *p = str;<br>   // while(*(str++) != '\0');<br>     //   str--;<br>       // *str = 'H';<br>    printf("Path is now become %s\n", p);<br>        //printf("ERRCODE %X\n", GetLastError());<br>    //while(malloc(10));<br>    dumpfile = pcap_dump_open(adhandle, str);<br>    printf("ERRCODE %X\n", GetLastError());<br><br>    if(dumpfile==NULL)<br>    {<br>        fprintf(stderr,"\nError opening output file\n");<br>        return -1;<br>    }<br><br>    printf("\nlistening on %s... Press Ctrl+C to stop...\n", d->description);<br><br>    /* 释放设备列表 */<br>    pcap_freealldevs(alldevs);<br><br>    /* 开始捕获 */<br>    printf("Catch Loop\n");<br>    pcap_loop(adhandle, 0, packet_handler, (unsigned char *)dumpfile);<br><br>    return 0;<br>}<br><br>/* 回调函数,用来处理数据包 */<br>void packet_handler(u_char *dumpfile, const struct pcap_pkthdr *header, const u_char *pkt_data)<br>{<br>    /* 保存数据包到堆文件 */<br>    pcap_dump(dumpfile, header, pkt_data);<br>}<br><br><br>--test.c--<br><br><br><br><br>