void main(int argc, char *argv[]) { if(argc==2) { if(strcmp(argv[1], "-install")==0) { TCHAR szPathName[256]; TCHAR* p; if(::GetFullPathName(L"LSP.dll", 256, szPathName, &p) != 0) { if(InstallProvider(szPathName)) { printf(" Install successully. \n"); return; } } printf(" Install failed. \n"); return; } else if(strcmp(argv[1],"-remove")==0) { if(RemoveProvider()) printf(" Deinstall successully. \n"); else printf(" Deinstall failed. \n"); return; } } printf(" Usage: Instlsp [ -install │ -remove ] \n"); }
void CSyssetPage::OnRemove() // 用户点击"卸载"按钮 { if(RemoveProvider()) MessageBox(L" 应用层过滤卸载成功!"); else MessageBox(L" 应用层过滤卸载失败!"); }
void main(int argc, char *argv[]) { char szFileName[256]; char szPathName[256]; char* p; if(argc == 3) { strcpy(szFileName,argv[2]); if(strcmp(argv[1], "-install")==0) { if(::GetFileAttributes(szFileName) == -1) { printf("Error:Can't Find File!\n"); return; } if(::GetFullPathName(szFileName, 256, szPathName, &p) != 0) { if(InstallProvider(szPathName)) { printf("\nInstall Successully!\n"); return; } } printf("\nInstall Failed -> %d\n",::GetLastError()); return; } else if(strcmp(argv[1],"-remove")==0) { if(RemoveProvider()) printf("\nRemove Successully!\n"); else printf("\nRemove Failed -> %d\n",::GetLastError()); return; } } printf(" Usage: test.exe [ -install │ -remove ] DllName\n"); printf("\n\teg:test.exe -install LSP.dll\n"); printf("\tor:test.exe -remove LSP.dll\n"); printf("\n"); }
void CoverProviders::ProviderDestroyed() { CoverProvider* provider = static_cast<CoverProvider*>(sender()); RemoveProvider(provider); }
// // Function: main // // Description: // Parse the command line arguments and call either the install, remove, // print, etc. routines. // int _cdecl main(int argc, char *argv[]) { WSADATA wsd; LPWSAPROTOCOL_INFOW pProtocolInfo = NULL; LSP_ENTRY *pLspMap=NULL; #ifdef _WIN64 WINSOCK_CATALOG eCatalog = LspCatalog64Only; #else WINSOCK_CATALOG eCatalog = LspCatalog32Only; #endif INT iTotalProtocols = 0, iLspCount = 0, i; DWORD *pdwCatalogIdArray = NULL, dwCatalogIdArrayCount = 0, // How many to install over dwRemoveCatalogId = 0; BOOL bInstall = TRUE, bInstallOverAll = FALSE, bRemoveAllLayeredEntries = FALSE, bPrintProviders = FALSE, bDisplayOnlyLayeredEntries = FALSE, bVerbose = FALSE, bMapLsp = FALSE, bArgsOkay = FALSE, bIFSProvider = FALSE; char *lpszLspName = NULL, *lpszLspPathAndFile = NULL, *lpszLspPathAndFile32 = NULL; int rc; //////////////////////////////////////////////////////////////////////////// // // Initialization and Command Line Parsing // //////////////////////////////////////////////////////////////////////////// // Load Winsock rc = WSAStartup( MAKEWORD(2,2), &wsd ); if ( 0 != rc ) { fprintf( stderr, "Unable to load Winsock: %d\n", rc ); return -1; } // Initialize data structures LspCreateHeap( &rc ); __try { InitializeCriticalSection( &gDebugCritSec ); } __except( EXCEPTION_EXECUTE_HANDLER ) { goto cleanup; } // First count how many catalog parameters are supplied so we can dynamically // allocate the right sized buffer for(i=1; i < argc ;i++) { if ( strncmp( argv[ i ], "-o", 2 ) == 0 ) dwCatalogIdArrayCount++; } // Allocate space for the array of catalog IDs if ( 0 < dwCatalogIdArrayCount ) { pdwCatalogIdArray = (DWORD *) LspAlloc( sizeof( DWORD ) * dwCatalogIdArrayCount, &rc ); if ( NULL == pdwCatalogIdArray ) { goto cleanup; } } // Set back to zero so we can use it as the index into our array dwCatalogIdArrayCount = 0; // Parse the command line for(i=1; i < argc ;i++) { if ( ( 2 != strlen( argv[i] ) ) && ( '-' != argv[i][0] ) && ( '/' != argv[i][0] ) ) { goto cleanup; } switch ( tolower( argv[i][1] ) ) { case 'a': // Install LSP over all currently installed providers bInstallOverAll = TRUE; break; case 'c': // For 64-bit: which catalog to operate on? if (i+1 >= argc) goto cleanup; switch (tolower(argv[i+1][0])) { case 'b': // Both Winsock catalogs eCatalog = LspCatalogBoth; break; case '6': // 64-bit Winsock catalog only eCatalog = LspCatalog64Only; break; case '3': // 32-bit Winsock catalog only eCatalog = LspCatalog32Only; break; default: goto cleanup; break; } i++; break; case 'd': // Full path and filename to LSP if ( i+1 >= argc ) goto cleanup; if (_strnicmp(argv[i], "-d32", 4)) lpszLspPathAndFile32 = argv[ ++i ]; else lpszLspPathAndFile = argv[ ++i ]; break; case 'f': // Uninstall all layered providers bRemoveAllLayeredEntries = TRUE; bInstall = FALSE; break; case 'h': // Install as an IFS provider bIFSProvider = TRUE; break; case 'i': // install bInstall = TRUE; break; case 'l': // print the layered providers only bPrintProviders = TRUE; bDisplayOnlyLayeredEntries = TRUE; break; case 'm': // Map and print the LSP structure bMapLsp = TRUE; bInstall = FALSE; break; case 'n': // name of the LSP to install (not the DLL name) if (i+1 >= argc) goto cleanup; lpszLspName = argv[++i]; break; case 'o': // catalog id (to install over) if (i+1 >= argc) goto cleanup; pdwCatalogIdArray[dwCatalogIdArrayCount++] = atoi(argv[++i]); break; case 'p': // print the catalog bPrintProviders = TRUE; bDisplayOnlyLayeredEntries = FALSE; break; case 'r': // remove an LSP bInstall = FALSE; if (i+1 >= argc) goto cleanup; dwRemoveCatalogId = atol(argv[++i]); break; case 'v': // verbose mode (when printing with -p option) bVerbose = TRUE; break; default: goto cleanup; break; } } #ifndef _WIN64 if ( LspCatalog64Only == eCatalog ) { fprintf(stderr, "\n\nUnable to manipulate 64-bit Winsock catalog from 32-bit process!\n\n"); goto cleanup; } #endif bArgsOkay = TRUE; gModule = LoadUpdateProviderFunction(); if ( TRUE == bPrintProviders ) { // Print the 32-bit catalog if ( ( LspCatalogBoth == eCatalog ) || ( LspCatalog32Only == eCatalog ) ) { printf( "\n\nWinsock 32-bit Catalog:\n" ); printf( "=======================\n" ); PrintProviders( LspCatalog32Only, bDisplayOnlyLayeredEntries, bVerbose ); } // Print the 64-bit catalog if ( ( LspCatalogBoth == eCatalog ) || ( LspCatalog64Only == eCatalog ) ) { printf( "\n\nWinsock 64-bit Catalog:\n" ); printf( "=======================\n" ); PrintProviders( LspCatalog64Only, bDisplayOnlyLayeredEntries, bVerbose ); } } else if ( TRUE == bInstall ) { if ( NULL == lpszLspPathAndFile ) { fprintf( stderr, "\n\nError! Please specify path and filename of LSP!\n\n"); bArgsOkay = FALSE; goto cleanup; } if ( TRUE == bInstallOverAll ) { // Make sure user didn't specify '-a' and '-o' flags if ( 0 != dwCatalogIdArrayCount ) { fprintf( stderr, "\n\nError! Cannot specify both '-a' and '-o' flags!\n\n" ); goto cleanup; } // Enumerate the appropriate catalog we will be working on pProtocolInfo = EnumerateProviders( eCatalog, &iTotalProtocols ); if ( NULL == pProtocolInfo ) { fprintf( stderr, "%s: EnumerateProviders: Unable to enumerate Winsock catalog\n", argv[ 0 ] ); goto cleanup; } // Count how many non layered protocol entries there are for(i=0; i < iTotalProtocols ;i++) { if ( LAYERED_PROTOCOL != pProtocolInfo[ i ].ProtocolChain.ChainLen ) dwCatalogIdArrayCount++; } // Allocate space for all the entries pdwCatalogIdArray = (DWORD *) LspAlloc( sizeof( DWORD ) * dwCatalogIdArrayCount, &rc ); if ( NULL == pdwCatalogIdArray ) { fprintf( stderr, "%s: LspAlloc failed: %d\n", argv[ 0 ], rc ); goto cleanup; } // Get the catalog IDs for all existing providers dwCatalogIdArrayCount = 0 ; for(i=0; i < iTotalProtocols ;i++) { if ( LAYERED_PROTOCOL != pProtocolInfo[ i ].ProtocolChain.ChainLen ) { pdwCatalogIdArray[ dwCatalogIdArrayCount++ ] = pProtocolInfo[ i ].dwCatalogEntryId; } } FreeProviders( pProtocolInfo ); pProtocolInfo = NULL; } // Install the LSP with the supplied parameters rc = InstallLsp( eCatalog, lpszLspName, lpszLspPathAndFile, lpszLspPathAndFile32, dwCatalogIdArrayCount, pdwCatalogIdArray, bIFSProvider, bInstallOverAll ); } else if ( TRUE == bMapLsp ) { // Display the 32-bit LSP catalog map if ( ( LspCatalogBoth == eCatalog ) || ( LspCatalog32Only == eCatalog ) ) { printf("\n32-bit Winsock LSP Map:\n\n"); pProtocolInfo = EnumerateProviders( LspCatalog32Only, &iTotalProtocols ); if ( NULL == pProtocolInfo ) { fprintf(stderr, "%s: EnumerateProviders: Unable to enumerate Winsock catalog\n", argv[ 0 ] ); goto cleanup; } pLspMap = BuildLspMap( pProtocolInfo, iTotalProtocols, &iLspCount ); if ( NULL == pLspMap ) { printf( "\nNo LSPs are installed\n\n" ); } else { PrintLspMap( pLspMap, iLspCount ); FreeLspMap( pLspMap, iLspCount ); pLspMap = NULL; } FreeProviders( pProtocolInfo ); pProtocolInfo = NULL; } // Display the 64-bit LSP catalog map if ( ( LspCatalogBoth == eCatalog ) || ( LspCatalog64Only == eCatalog ) ) { printf("\n64-bit Winsock LSP Map:\n\n"); pProtocolInfo = EnumerateProviders( LspCatalog64Only, &iTotalProtocols ); if ( NULL == pProtocolInfo ) { fprintf(stderr, "%s: EnumerateProviders: Unable to enumerate Winsock catalog\n", argv[ 0 ] ); goto cleanup; } pLspMap = BuildLspMap( pProtocolInfo, iTotalProtocols, &iLspCount ); if ( NULL == pLspMap ) { printf( "\nNo LSPs are installed\n\n" ); } else { PrintLspMap( pLspMap, iLspCount ); FreeLspMap( pLspMap, iLspCount ); pLspMap = NULL; } FreeProviders( pProtocolInfo ); pProtocolInfo = NULL; } } else { // We must be removing an LSP if ( TRUE == bRemoveAllLayeredEntries ) { if ( ( LspCatalogBoth == eCatalog ) || ( LspCatalog32Only == eCatalog ) ) RemoveAllLayeredEntries( LspCatalog32Only ); if ( ( LspCatalogBoth == eCatalog ) || ( LspCatalog64Only == eCatalog ) ) RemoveAllLayeredEntries( LspCatalog64Only ); } else { // Make sure a catalog entry to remove was supplied if ( dwRemoveCatalogId == 0 ) { bArgsOkay = FALSE; goto cleanup; } if ( ( LspCatalogBoth == eCatalog ) || ( LspCatalog32Only == eCatalog ) ) RemoveProvider( LspCatalog32Only, dwRemoveCatalogId ); if ( ( LspCatalogBoth == eCatalog ) || ( LspCatalog64Only == eCatalog ) ) RemoveProvider( LspCatalog64Only, dwRemoveCatalogId ); } } cleanup: if ( FALSE == bArgsOkay ) usage( argv[ 0 ] ); // // When invoked on Vista under non elevated permissions, the EXE is launched in // a new CMD window. The following getchar stops the window from exiting // immediately so you can see what its output was. // printf("Press any key to continue...\n"); getchar(); // // Free any dynamic allocations and/or handles // if ( NULL != pdwCatalogIdArray ) LspFree( pdwCatalogIdArray ); if ( NULL != pProtocolInfo) FreeProviders( pProtocolInfo ); if ( NULL != pLspMap ) FreeLspMap( pLspMap, iLspCount ); if ( NULL != gModule ) FreeLibrary( gModule ); LspDestroyHeap( ); DeleteCriticalSection( &gDebugCritSec ); WSACleanup(); return 0; }