問題タブ [advapi32]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wix - Windows Server 2012 で LsaAddAccountRights カスタム アクションがエラー コードを返す
ユーザーをサービスとしてログオンできるように昇格させるために使用するカスタム アクションがあります。これは、インストーラー中に実行されます。Windows Server 2012 まで、すべての Windows オペレーティング システムで何年も問題なく動作します。以下のコードをこのバージョンの Windows で実行するとlong、成功のために 0 が返されるのではなく、別のエラー コードが返されます。
問題は、コードが毎回異なるように見え、102938473 などの非常に大きな数になることです。
次のメソッドでエラー コードを実行してエラー コードを取得しましたが、有効なエラー コードではないように見える別の大きな数値が返されます。
これらのエラー コードを調べてみましたが、うまくいきませんでした。それらはランダムに生成され、無意味なようです。
返されたエラー コードを無視すると、ユーザーはサービスとして正常にログオンできるように見えます。エラーコードが返されることを除いて、すべてが機能しているように見えます。このエラー コードを無視することもできますが、これが有効なエラーである場合は、今後無視する可能性があります。
追加情報
カスタム アクション内のコードをコンソール アプリケーションでエラーなしで実行できます。それがwixインストーラーの一部である場合にのみ、機能しないようです。
c# - サーバー 2012 で MS 暗号ライブラリを使用する - CryptCreateHash エラー コード 87: ERROR_INVALID_PARAMETER
新しい Windows Server 2012 環境で Web アプリケーションをホストしようとしていますが、予期しないエラーが発生します。このコードは何年も前からコードベースに存在しており、他のプラットフォームでは問題は発生していません。
問題のコードは、Microsoft の暗号化ライブラリである advapi32.dll の CryptCreateHash 関数を呼び出します。関数を呼び出すと、呼び出しが失敗したことを示す 0 が返され、その後、Err.LastDllError がエラー コード 87 (ERROR_INVALID_PARAMETER) を返します。
前に述べたように、このコードは、開発者が使用した Windows Server 2012 テスト マシンを含め、さまざまな環境で長年にわたって完全に機能しました。ただし、サーバー 2012 も実行しているライブ環境に置くと (負荷分散システムのもう少し複雑なコンテキストではありますが)、エラーが発生します。どちらのサーバーもまだ Windows Server 2012 R2 に更新されておらず、すぐに使えるバージョンの OS を実行しています。
以下を使用して Crypt Provider へのハンドルを作成した後:
hCryptProv を使用して CryptCreateHas 関数を呼び出します。
ライブ環境と開発環境の両方からメソッドに渡されるデータの例:
開発:
hCryptProv = 4966968
CALG_MD5 = 32771
hHash = 0
ライブ:
hCryptProv = 1587622576
CALG_MD5 = 32771
hHash = 0
サーバーの hCryptProv ははるかに大きな数になる傾向がありますが、これらのパラメーターのセットはどちらも基本的に同一のようです (おそらく、RAM がはるかに多いためでしょうか?)。
MD5 の代わりに SHA1 を使用しようとしましたが、同じエラーが発生しました。
advapi32.dll が 32 ビットであると仮定すると、これは 32/64 ビット関連の問題である可能性がありますか?
任意の提案をいただければ幸いです、ありがとう。
編集:
要求に応じたプロトタイプ:
以前phProvは Integer でしたが、IntPtr を使用してまだテストしていません。HCRYPTPROVMSDNドキュメントでデータ型が定義されているため、ULongを使用してみました。
また、さまざまな構成で CryptAcquireContext によって返されるハンドルの値は次のとおりです。
これは、Integer をデータ型として使用したときのものです。ライブでのオーバーフローに注意してください。
編集2
これはおそらく修正されています。CryptDecrypt を呼び出すと、エラー -2146893820 (NTE_BAD_LEN) が表示されます。おそらく*pdwDataLen変数と関係があります。
メソッド定義は次のとおりです。
そして呼び出し:
c# - Pinvoke を使用して advapi.dll を呼び出す: CryptDecrypt および CryptEncrypt の予期しない動作
これは、この質問のフォローアップです。
結果のデータを共有するレガシー製品との互換性を確保するために、VB.net から WinAPI 暗号化関数を呼び出しています。
コードは何年も正常に機能していましたが、最近、Windows Server 2012 で実行しているときに問題が発生しました。さまざまな例と以前の質問への回答を確認した後、以前は文字列だったものを変更するなど、コードをオーバーホールしました。より正しい機能であると私は信じています。以前は文字列でどのように機能していたのかわかりませんが、元の Server 2012 の問題を修正した後、文字列の NTE_BAD_LENGTH が原因で失敗していました。
ここで、文字列をバイト配列に変換した後、コードは以前と同じ方法で暗号化していないように見えます。また、CryptEncrypt によって生成されたものを復号化することもありません。
コードの大部分は次のとおりです。
(CryptCreateHash、CryptHashData、CryptDeriveKey の呼び出しがこれに先行します)
私のメソッド プロトタイプは次のように定義されています。
出力例は次のとおりです。
テスト データ: Testing123
バッファ内の平文データ: 84、101、115、116、105、110、103、49、50、51、
暗号化: CW?? ???_
バッファ内の暗号化データ: 12, 67, 87, 133, 158, 9, 139, 250, 255, 95,
バッファ内の復号化データ: 12, 67, 87, 133, 158, 9, 139, 250, 255、95、
解読済み: CW?? ???_
ご覧のとおり、復号化後のバッファはまったく同じままです。
なぜこれが起こっているのかわかりません。私の唯一の理論は、Byte() をエンコードしている文字セットに関係しているということですが、いくつか試してみましたが、違いはありません。これは、パスワード パラメータ ( に渡される Byte() ) にも適用される場合がありますCryptHashData。
どんな助けでも大歓迎です。
編集 1: 助けてくれてありがとう、私は今日早くバッファ コピーの問題に気付きました。
実際、VB の配列は最高のインデックスでインスタンス化されるため、127 は長さ 128 の配列を作成し、混乱を招きます。
あなたが話しているように、私の問題は現在エンコーディングにあると思います。以前は、現在行っているように、最初に byte() に変換されるのではなく、.NET String としてデータがCryptEncrypt/に渡されていました。CryptDecryptただし、アンマネージ コードがこの文字列をどのように処理したかはわかりません。おそらく、デフォルトの .NET エンコーディングまたは Windows エンコーディングですか?
UTF8 と Unicode を試しましたが、どちらも元のコードの動作をミラーリングせず、以前に保存された文字列を元の値に暗号化/復号化します。これは、従来の動作を正確に反映するために、アンマネージド メソッドを引き続き使用したい理由でもあります (アンマネージド メソッドを使用する VB6 アプリは、暗号化されたデータを .NET で復号化する前に生成するために使用されます)。
My Code は暗号化と復号化を行うようになりましたが、前述したように、同じ暗号化技術を使用しているにもかかわらず、出力される値は元のデータと一致しません。いつもお世話になっております。
c# - Logindata c# WinServices を使用してウィンドウ サービスでプログラムを実行する
クライアント<->サーバーシステムとして機能するアプリとサービスを作成しています。クライアントはサーバーにデータを送信しており、サーバーはサードパーティのアプリを呼び出しています。これは、サード パーティのアプリがネットワーク ドライブにアクセスする必要があるまで問題なく動作します。サードパーティ ライブラリが呼び出し元 ( LocalService ) からログイン データを継承し、LocalService がドメインの一部でない限り、アプリはネットワーク ドライブにアクセスできません。そのため、クライアントでユーザー ドメイン データを取得しようとし (これは問題ではありませんでした) ProcessInfo、サーバーでプロセスを偽装しようとしましたが、これは失敗しました。ProcessInfo.Username短いGoogle検索の後、Windowsサービスでおよびを使用できないことがProcessInfo.Passwordわかったので、advapi32関数を使用しましたCreateProcessWithLogonW:
これは正常に動作していますが、サーバー タスク マネージャーを調べると、サードパーティ アプリの新しいプロセスがまだ「ユーザー名」=「ローカル サービス」で実行されていることがわかります。プロセスは現在、指定されたログイン データで「偽装」されていますか?
c# - 非常に大きなファイルシステムをクロールするための最良の戦略は何ですか?
複数の共有に分散された約 100,000,000 個の Windows ネットワーク ファイルの所有者を取得する必要があります。C# コード内から advapi32 GetNamedSecurityInfo 関数を使用していますが、これは長時間実行されるプロセスです。現在、複数の共有を並行してクロールしています。そして、共有ごとに、すべてのファイルとフォルダーを順番にクエリしています。私の質問は、クロール/収集時間を最小限に抑えるための最良の方法は何ですか?
回答ありがとうございます
c# - RegEnumKeyEx - アクセス違反の書き込み場所
状況:
- 特定のレジストリ キーのすべてのサブキーのリストを取得する必要があります。
- 32 ビットと 64 ビットの両方のソフトウェア キーにアクセスする必要があるため、レジストリの名前空間を使用できません。
- .Net 3.5 で CSharp を使用し、advapi32.dll のレジストリ機能を使用する
ほとんどの機能が動作していますが、エラーが発生しています。値を含むキーに到達すると、それをスキップするか、次のエラーをスローします。
- 「xxxxx.exe の 0x00C819CD で未処理の例外: 0xC0000005: アクセス違反書き込み場所 0x00720077.」
エラーが発生した場合、どちらの catch ステートメントにも到達しません。プログラムを激しくクラッシュさせます。フォーラムで読んだことから、保護されたメモリへの書き込みに問題がある可能性があると思いますが、表示される例はすべてC ++用です
私の宣言 (P/Invoke Interop Assistant から):
私の機能(明らかに進行中の作業なので、少し面倒です):
c# - C# PInvoke CryptImportKey が「指定された型が無効です」で失敗する
CryptImportKey 関数を使用して PFX を Gemalto .NET IDPrime スマート カートにインポートしようとしていますが、「指定された型が無効です」(2148073482) エラーが発生します。RSACryptoServiceProvider.ExportCspBlob(true) 呼び出しが間違った形式でキーを返していると思われます。http://www.idrix.fr/Root/Samples/PfxImporter.csのサンプル コードを使用しています。注: Microsoft Base Smart Card Crypto Provider の AllowPrivateExchangeKeyImport と AllowPrivateSignatureKeyImport を 0x1 に設定しましたが、変更はありません。Windows Server 2012 を実行していますが、それが問題だとは思いません。
このコード サンプルの何が問題なのか教えてください。
c# - C# から Advapi32.dll ネイティブ EventWrite 関数を呼び出しますか?
C# .Net を使用して Window のService Trigger Eventsをトリガーしようとしています。
具体的には、WebClient サービスが非特権アカウントから開始されるように、このイベントをトリガーしようとしています。
C++ でのサービスの開始に関するこのリファレンスを見つけることができましたが、C# で同じ機能を実装する方法がわかりません。
私が使用しているコードは次のとおりです。
への呼び出しは例外をEventWriteスローしPInvokeStackImbalanceます。これは私のEVENT_DESCRIPTOR構造のエラーでしょうか?
これは、ネイティブEvent_Descriptorの構造です。
これは私のC#構造です:
これは、ネイティブのEventWrite関数の構造です。
これは、Event Write への PInvoke 呼び出しです。
PInvokeStackImbalance 例外をスローしている私が行っている呼び出しは次のとおりです。
java - jnaを使用したWindows API:指定されたプロシージャが見つかりませんでした
jnaを使用して Java コードでRegLoadKey関数を使用する必要がありますが、次のエラー メッセージが表示されます。
スレッド「メイン」での例外 java.lang.UnsatisfiedLinkError: 関数 'RegLoadKey' の検索中にエラーが発生しました: 指定されたプロシージャが見つかりませんでした。引用符
RegLoadKey 構文
私のコード: Advapi32.java
apiTest.java
私のコードにはいくつかの問題があると思います。私はWindows APIとjnaが初めてです。